存档

2011年8月 的存档

如何批量更新数据

2011年8月18日 没有评论

在Navision中, 我们经常会遇到批量更新数据操作. 下面会大家介绍一些方法来快速实现批量更新.

1. 使用Report. 方法如下:

a) 创建新报表. 报表DataItem定义为需要修改的报表, 如需要刷新Item Ledger Entry的Description. 则DataItem定义为Item Ledger Entry.

b) 在报表的onAfterGetRecord()中编写代码.
if Item.Get(“Item No.”) then Begin
“Description” := Item.Description;
Modify(False);
End;

c) 在OnPostDataItem()中编写代码.
Commit;

d) 使用Ctrl+R运行报表, 执行预览后, 将会把所有的Description全部进行刷新。

这里创建的报表不需要保存, 直接在全部运行完毕后, 关闭窗口. 关闭报表. 不保存. 数据更新就已经生效了.

2. 使用DataPort更新数据.

a) 创建DataPort. 指定为需要更新数据来源

b) 设定DataPort的AutoSave/AutoReplace为No.

c) 在DataPort的OnAfterImportRecord()中编写更新代码.

分类: C/AL, Development 标签: ,

在Navision中使用XMLPort交换数据

2011年8月8日 没有评论

下面为大家介绍如何在Navision中使用XMLPort交换数据.

    1. 打开xml文件, 使用CreateInstream, 读取到InStream中.

IFile.OPEN(FileName);
IFile.CREATEINSTREAM(IStr);
SalesHeaderXML.SETSOURCE(IStr);
SalesHeaderXML.IMPORT;
IFile.CLOSE;

  1. 设定XMLPort的Source.  =SetSource(Instream)
  1. 导入XMLPort
  2. 关闭文件

 

XMLPort中已经进行了XML文件的Mapping操作.

Mapping过程中. Text表示纯文本, 仅作标记用.而Element/Attribute表示是元素还是属性.

 

表示表的一系列记录时, 通常Table 作为Element表示一条记录, Attribute表示一条记录中的每个字段. 再前面再增加一个Element就表示多个记录.

 

 

通过XMLPort中的函数. 比如GenSalesHeader(Var tempSalesHeader : Record::Sales Header) 表示写入Sales Header.

 

GenSalesHeader(VAR TempSalesHeader : Record “Sales Header”)

SalesHeader.RESET;

IF SalesHeader.FIND(‘-‘) THEN

  REPEAT

    TempSalesHeader := SalesHeader;

 

    TempSalesHeader.”External Document No.” := SalesHeader.”No.”;

    TempSalesHeader.”Document Type” := TempSalesHeader.”Document Type”::Order;

    TempSalesHeader.”No.” := ”;

 

    SalesSetup.GET;

    NoSeriesMgt.InitSeries(SalesSetup.”Order Nos.”,SalesSetup.”Order Nos.”,SalesHeader.”Posting Date”,

    TempSalesHeader.”No.”,TempSalesHeader.”No. Series”);

 

    TempSalesHeader.INSERT(TRUE);

    TempSalesHeader.VALIDATE(“Sell-to Customer No.” , ‘C90000002’);

    TempSalesHeader.”Ship-to Code” := SalesHeader.”Ship-to Code”;

    TempSalesHeader.”Ship-to Name” := SalesHeader.”Ship-to Name”;

    TempSalesHeader.”Ship-to Address” := SalesHeader.”Ship-to Address”;

    TempSalesHeader.”Ship-to City” := SalesHeader.”Ship-to City”;

 

    LinkTable.INIT;

    LinkTable.”No.” := TempSalesHeader.”External Document No.”;

    LinkTable.”No. 2″ := TempSalesHeader.”No.”;

    LinkTable.INSERT;

 

    TempSalesHeader.MODIFY(TRUE);

  UNTIL SalesHeader.NEXT = 0;

 

 

导出XML.

  1. 创建File.
  2. 使用CreateOutStream指定OutStream
  1. 执行XMLPort的条件操作
  1. 设定XMLPort的Destination为OutStream
  1. 执行XMLPort.Export.
  1. 文件关闭

      OFile.CREATE(FileName);

      OFile.CREATEOUTSTREAM(Ostr);

      ICOutboxExportXML.SetICOutboxTrans(ICOutboxTrans);

      ICOutboxExportXML.SETDESTINATION(Ostr);

      ICOutboxExportXML.EXPORT;

      OFile.CLOSE;

      CLEAR(Ostr);

      CLEAR(ICOutboxExportXML);

 

下面是SetICOutboxTrans过程的执行动作.

SetICOutboxTrans(VAR NewICOutboxTrans : Record “IC Outbox Transaction”)

ICOutboxTrans.DELETEALL;

ICOutBoxSalesHdr.DELETEALL;

ICOutBoxSalesLine.DELETEALL;

 

IF NewICOutboxTrans.FIND(‘-‘) THEN

  REPEAT

    ICOutboxTrans := NewICOutboxTrans;

    ICOutboxTrans.INSERT;

 

 

    NewICOutBoxSalesHdr.SETRANGE(“IC Transaction No.”,NewICOutboxTrans.”Transaction No.”);

    NewICOutBoxSalesHdr.SETRANGE(“IC Partner Code”,NewICOutboxTrans.”IC Partner Code”);

    NewICOutBoxSalesHdr.SETRANGE(“Transaction Source”,NewICOutboxTrans.”Transaction Source”);

    IF NewICOutBoxSalesHdr.FIND(‘-‘) THEN

      REPEAT

        ICOutBoxSalesHdr := NewICOutBoxSalesHdr;

        ICOutBoxSalesHdr.INSERT;

      UNTIL NewICOutBoxSalesHdr.NEXT = 0;

 

    NewICOutBoxSalesLine.SETRANGE(“IC Transaction No.”,NewICOutboxTrans.”Transaction No.”);

    NewICOutBoxSalesLine.SETRANGE(“IC Partner Code”,NewICOutboxTrans.”IC Partner Code”);

    NewICOutBoxSalesLine.SETRANGE(“Transaction Source”,NewICOutboxTrans.”Transaction Source”);

    IF NewICOutBoxSalesLine.FIND(‘-‘) THEN

      REPEAT

        ICOutBoxSalesLine := NewICOutBoxSalesLine;

        ICOutBoxSalesLine.INSERT;

      UNTIL NewICOutBoxSalesLine.NEXT = 0;

  UNTIL NewICOutboxTrans.NEXT = 0;

 

相当于XMLPort是工作于临时表. 要做到Export. 首相将记录全部清空, 然后插入需要的记录. 接着再导出.

分类: C/AL, Web Services 标签: