关于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>>