关于Axapta Memo
//SoondyXUE@Champway -Silverlit
Memo不可以排序,不可以创建索引,不可以用EDT的Relation而廉价得到Go to the Main Table和Lookup等功能,不可以在SQL中作
为条件字段(where MemoField==XXField 编译器会报错).等等..
这么多的不可以,我们有什么理由要使用它呢?存在自然有其道理。呵呵.
某些情况下,客户确实有需求能有个字段可以象超级文本一样,能够存储大量的文本资料.姑且称之为Remark字段,通常是生产的产
品规格说明书之类的,又不想用document handling 来处理。因可能不同情况下,还有机会再此Remark内容的基础上做些修改。
下文试图用实例探索一下,使Memo也可以做到某些功能。
1.Memo类型可以find().
方法:把要比较的字符串赋值给变量String然后通过循环select表,取出表中MemoField字段的值,通过逐一比较,即可。
public static TableTesting find(str _tmpStr)
{
while select _TableTesting
{
if (_TableTesting.FieldA==_tmpStr)
{
break;
}
}
return _TableTesting_tmp;
}
2.Memo类型可以lookup且可再修改内容.
3.Memo类型可以Go2MainTable.
方法:
假如SLT_RemarkTxtTable 是存储超长文本的表,其中包含Memo字段.
1,建立EDT string类型,stringsize=(Memo)
2, 在Table中新加一个字段string类型,EDT=上面1 的EDT,Table中有方法LookupRemarkTXTTable.
3,在form中加method,gotomaintable(参考gotomaintable方法)
4,新建StringEdit控件,LookupButton=Never,AutoDeclaration=Yes,DataSource & DataField也要设置,该控件的methods有
context和lookup,
public void context()
{
;
element.GoToMainTable(This,False,"SLT_RemarkTxtTable");
}
//重写系统的lookup方法.
public void lookup(boolean _UnWork=Noyes::Yes)
{
str _tmp;
if (_UnWork==NoYes::Yes)
return;
_tmp = this.text();
salesTable.SLT_RemarkTXTSubFile="";
this.text("");
if (!SLT_RemarkTxtTable::lookupRemarkTxtTable(this))
{
salesTable.SLT_RemarkTXTSubFile = strrtrim(strltrim(_tmp));
this.text(strrtrim(strltrim(_tmp)));
}
}
其中lookupremarktxttable方法是写在table中,
client static void lookupRemarkTxtTable(FormStringControl _ctrl)
{
SysTableLookup sysTableLookup;
Query q = new Query();
QueryBuildDataSource qbds;
;
sysTableLookup = SysTableLookup::newParameters(tableNum(SLT_RemarkTxtTable), _ctrl);
sysTableLookup.addLookupfield(fieldNum(SLT_RemarkTxtTable, Remark));
sysTableLookup.addLookupfield(fieldNum(SLT_RemarkTxtTable, IsDefault));
qbds = q.addDataSource(tableNum(SLT_RemarkTxtTable));
sysTableLookup.parmQuery(q);
sysTableLookup.performFormLookup();
}
5,新建立Button属性设置,将此Button设置为有Ico(象笔状)。
width=30
height=20
buttondisplay=image only
normalresource=808
backstyle=transparent
其下有clicked方法:
void clicked()
{
;
SLT_RemarkTXTSubFile.setFocus();
SLT_RemarkTXTSubFile.lookup(NoYes::No);
}
大功告成.可以试试效果了.
注:go2mainTable()请参考另一文章专题. <<Go2MainTable>>
浙公网安备 33010602011771号