文書変換プラグインの新規行
2478 ワード
需要:文書変換プラグインでは、ソースから得る複数行のデータがある.ある行にはデータa=100,b=5があるが、このときに新たに1本の記録a=5,b=0を追加する必要があり、その他のデータは変わらず、ターゲットリストに挿入され、新たにこの行のデータをターゲットリストのCフィールドに「景品」として付与し、元の行には「景品以外」として付与する.
文書変換プラグイン、ベースクラスKingdee.BOS.Core.Metadata.ConvertElement.PlugIn.AbstraactConvertPlugInは、このような派生プラグインクラスを派生し、文書変換ルールの「プラグインポリシー」に登録します.必要に応じて、AfterConvertメソッドを再ロードすることで実現でき、イベントのパラメータe.Resultは生成された下流文書の完全なパケットであり、データ検索、文書体行挿入などのデータ処理を行うことができる.
特に注意:景品行が必要な場合は、ソース明細も取得できます.関連するサブ文書ボリューム行も同時にコピーする必要があります.
文書のパケットはツリーのようなもので、ルートポイントがあり、階層ごとに下に伸び、文書体、サブ文書体、または関連サブ文書体を通ります.したがって、ルートから文書体のすべての行を見つけるのは難しいので、再帰する必要があります.すべての文書体行を迅速に取得し、その階層を無視するために、システムはExtendDataEntitySetデータ構造を提供し、FindByEntityKey()メソッドを提供して指定した文書体のすべての行を迅速に検索します.この関数は、パケットのツリーに関係なく、このセットに新しい行を追加し、ルートパケットに追加しません.ただの遊離的で、帰属のない行で、もちろん表示されません.新しいローは、デバッグなしで直接コピーしないでください.
ExtendedDataEntity[] rows = e.Result.FindByEntityKey("FPOOrderEntry");
Entity entity = e.TargetBusinessInfo.GetEntity("FPOOrderEntry");
Entity deliveryEntity = e.TargetBusinessInfo.GetEntity("FEntryDeliveryPlan");
foreach(var row in rows)
{
DyanmicObject oldRow = row.DataEntity;
if (oldRow )
{
// ,
DynamicObject billDataObj = oldRow.Parent as DynamicObject;
// , ,
DynamicObjectCollection billEntryRows = entity.DynamicProperty.GetValue(billDataObj) as DynamicObjectCollection;
//
// DynamicObject newRow = new DynamicObject(entity.DynamicObjectType);
// TODO : oldRow -> newRow
// : ,
DynamicObjectCollection deliveryRows = diliveryEntity.DynamicProperty.GetValue(newRow) as DynamicObjectCollection;
deliveryRows.Clear();
DynamicObject newDeliveryRow = new DynamicObject(deliveryEntity.DynamicObjectType);
deliveryRows.Add(newDeliveryRow);
// TODO :
// ,
billEntityRows.Insert(billEntityRows.IndexOf(oldRow), newRow);
// , ( , , )
int seq = 1;
foreach(var entityRow in billEntryRows)
{
entity.SeqDynamicProperty.SetValue(entityRow, seq);
seq++;
}
}
}