文章目录


前言

链接


由于类PurchFormletterParmDataInvoice.createInvoiceHeaderFromTempTable()调用 .skipEvents(true)、skipDataMethods(true)、.skipDatabaseLog(true) 并调用 Query::insert_recordset(),因此不会触发任何默认事件。


扩展

通过扩展和 CoC 完成。

[DataEventHandler(tableStr(VendInvoiceInfoTable), DataEventType::InitializingRecord)]  
public static void VendInvoiceInfoTable_onInitializingRecord(Common sender, DataEventArgs e) 
 {      
  VendInvoiceInfoTable vendInvoiceInfoTable = sender as VendInvoiceInfoTable;       
  vendInvoiceInfoTable.CustomField  =VendParameters::find().DefaultCustomField; 
 }

1.将自定义字段添加到 VendInvoiceInfoTable
2.将自定义字段添加到 VendInvoiceInfoTableTmp(名称和类型需要与在 VendInvoiceInfoTable 上创建的内容匹配)我们必须将其添加到此表中,因为在 PurchFormLetterParmDataInvoice.insertParmTable() 上,它调用了一个循环遍历字段列表的 buf2buf 命令。
3.创建表 VendInvoiceInfoTable 的扩展类并应用 defaultRow 方法的 CoC,该方法会将值填充到 VendInvoiceInfoTable 的常规实例和 tmp 实例中,但是除非完成其余步骤,否则它不会保存到数据库。

[ExtensionOf(tableStr(VendInvoiceInfoTable))]
final class APInvoiceModsVendInvoiceInfoTable_Extension
{
    /// <summary>
    /// COC table method defaultRow which resets default valies
    /// </summary>
    /// <param name = "_purchTable">PurchTable</param>
    /// <param name = "_ledgerJournalTrans">LedgerJournalTrans</param>
    /// <param name = "_resetFieldState">Reset field state</param>
    public void defaultRow(PurchTable _purchTable, LedgerJournalTrans _ledgerJournalTrans, boolean _resetFieldState)
    {
        CustomEDTType defaultCustomField;
        
 next defaultRow(_purchTable,_ledgerJournalTrans,_resetFieldState);

        //find the default custom field from vend parms
 defaultCustomField = VendParameters::find().DefaultCustomField;
        
 //save the default invoice type to the header which will get copied to    VendInvoiceInfoTableTmp and then back to the main table due to PurchFormLetterParmDataInvoice.createInvoiceHeaderFromTempTable
 this.CustomField = defaultCustomField;

    }

}

创建 PurchFormLletterParmDataInvoice 的扩展类,并将 CoC 应用于 buildCreateInvoiceHeaderFromTempTableFieldQuery 和 buildCreateInvoiceHeaderFromTempTableFieldMap,因为 PurchFormletterParmDataInvoice.createInvoiceHeaderFromTempTable() 方法创建了要从临时表复制到主表的字段的动态映射

final class APInvoiceModsPurchFormletterParmDataInvoice_Extension
{
    /// <summary>
    /// COC method that adds our custom field to the Field Query selection  from the temp table
    /// </summary>
    /// <param name = "_qbdsVendInvoiceInfoTableTmp">VendInvoiceInfoTableTmp</param>
    protected void buildCreateInvoiceHeaderFromTempTableFieldQuery(QueryBuildDataSource _qbdsVendInvoiceInfoTableTmp)
    {
        next buildCreateInvoiceHeaderFromTempTableFieldQuery(_qbdsVendInvoiceInfoTableTmp);

        //add custom selection field
 _qbdsVendInvoiceInfoTableTmp.addSelectionField(fieldNum(VendInvoiceInfoTableTmp, CustomField));
    }

    /// <summary>
    /// COC method thats adds our custom field to the dynamic field map against the main table. Which will get copied from the selection query
    /// </summary>
    /// <param name = "_qbdsVendInvoiceInfoTableTmp">VendInvoiceInfoTableTmp</param>
    /// <returns>Modified dynamic map to insert into the db</returns>
    protected Map buildCreateInvoiceHeaderFromTempTableFieldMap(QueryBuildDataSource _qbdsVendInvoiceInfoTableTmp)
    {
        var targetToSourceMap = next buildCreateInvoiceHeaderFromTempTableFieldMap(_qbdsVendInvoiceInfoTableTmp);
 
        targetToSourceMap.insert(fieldStr(VendInvoiceInfoTable, CustomField), [_qbdsVendInvoiceInfoTableTmp.uniqueId(), fieldStr(VendInvoiceInfoTableTmp, CustomField)]);
       
 return targetToSourceMap;
     }

}
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐