zoukankan      html  css  js  c++  java
  • Dynamics 365 FO extension

    1. 窗体控件不再支持Active X 控件和ManagedHost控件,取而代之的是一种可扩展的控件架构。

    2. 获得窗体的DataSource

    [FormEventHandler(formStr(HcmPosition), FormEventType::Initialized)]
    public static void HcmPosition_OnInitialized(xFormRun sender, FormEventArgs e)
    {

    FormDataSource hcmosition_ds = sender.dataSource(formDataSourceStr(HcmPosition, HcmPosition));
    Or
    FormDataSource hcmosition_ds = sender.dataSource('HcmPosition');
    }

    3. FormDataSource的EventHandler获得FormRun

    [FormDataSourceEventHandler(formDataSourceStr(HcmPosition, HcmPosition), FormDataSourceEventType::Created)]
    public static void HcmPosition_OnCreated(FormDataSource sender, FormDataSourceEventArgs e)
    {

    FormRun formRun = sender.formRun() as FormRun;

    }

    4. 通过FormControl的EventHandler获得FormRun

    [FormControlEventHandler(formControlStr(HcmPosition, HcmPosition_PositionId1), FormControlEventType::Modified)]
    public static void HcmPosition_PositionId1_OnModified(FormControl sender, FormControlEventArgs e)
    {
    FormRun formRun = sender.formRun() as FormRun;

    }

    5. 获得窗体上的FormControl



    [FormEventHandler(formStr(HcmPosition), FormEventType::Initialized)]
    public static void HcmPosition_OnInitialized(xFormRun sender, FormEventArgs e)
    {
    sender.design().controlName(formControlStr(HcmPosition, HcmPositionNewPosition)).AllowEdit(false);
    // to get form open Mode
    OpenMode openMode = sender.args().openMode();
    }

    6. 获得Current Record


    [FormControlEventHandler(formControlStr(HcmPosition, HcmPositionNewPosition), FormControlEventType::Clicked)] public static void HcmPositionNewPosition_OnClicked(FormControl sender, FormControlEventArgs e) { HcmPosition hcmposition = sender.formRun().dataSource(1).cursor();

    HcmPosition hcmposition = sender.args().record(); }

    7. 使用DataEventArgs发送验证结果

    [DataEventHandler(tableStr(CategoryTable), DataEventType::ValidatingDelete)]
    public static void CategoryTable_onValidatingDelete(Common _sender, DataEventArgs _e)
    {
    CategoryTable categoryTable = _sender as CategoryTable;
    ValidateEventArgs validateEventArgs = _e as ValidateEventArgs;
    boolean ret = true;

    if (categoryTable.UseInProject)
    {
    ProjCategory projCategory = ProjCategory::find(categoryTable.CategoryId);
    ret = projCategory.validateDelete();
    }

    if (ret && categoryTable.UseInExpense)
    {
    TrvCostType trvCostType = TrvCostType::find(categoryTable.CategoryId);
    ret = trvCostType.validateDelete();
    }

    if (!ret)
    {
    validateEventArgs.parmValidateResult(false);
    }
    }

    8. 用 ValidateFieldValueEventArgs 发送验证结果给Validate Field method

    [DataEventHandler(tableStr(LedgerParameters), DataEventType::ValidatingFieldValue)]
    public static void LedgerParameters_onValidatingFieldValue(Common sender, DataEventArgs e)
    {
    ValidateFieldValueEventArgs ve = e;
    boolean isValid = true;
    LedgerParameters ledgerParameters = sender as LedgerParameters;
    #isoCountryRegionCodes

    if (ve.parmFieldName() == fieldStr(LedgerParameters, ChineseVoucher_CN)
    && SysCountryRegionCode::isLegalEntityInCountryRegion([#isoCN]))
    {
    if ((select firstonly RecId from LedgerJournalTrans
    where LedgerJournalTrans.LedgerVoucherType_CN != 0
    || LedgerJournalTrans.Voucher_CN != '').RecId != 0)
    {
    // The general journal needs to be empty in order to modify the setup for the Chinese voucher system.
    isValid = checkFailed("@GLS54497");
    }
    ve.parmValidateResult(isValid);
    }

    }
    Form data source event handler

    [FormDataSourceEventHandler(formDataSourceStr(EcoResProductDetailsExtended, InventTable), FormDataSourceEventType::Written)]

    public static void InventTable_OnWritten(FormDataSource sender, FormDataSourceEventArgs e){
    FormRun form = sender.formRun();

    FormDataSource InventTable_ds = form.dataSource(formDataSourceStr(EcoResProductDetailsExtended,InventTable)) as FormDataSource;

    InventTable inventTable = InventTable_ds.cursor();

    }

    Form event handler
    Table Buffer on form closing event

    [FormEventHandler(formStr(EcoResAttributeValue), FormEventType::Closing)]

    public static void EcoResAttributeValue_OnClosing(xFormRun sender, FormEventArgs e)

    {
    FormDataSource ecoResProduct_ds = sender.dataSource(formDataSourceStr(EcoResAttributeValue, EcoResProductAttributeValue));

    EcoResProductAttributeValue ecoResAttributeValue = ecoResProduct_ds.cursor();

    }

    Control value and form event level for which auto declaration must be set true

    [FormControlEventHandler(formControlStr(EcoResProductCreate, OKButton), FormControlEventType::Clicked)]

    public static void OKButton_OnClicked(FormControl sender, FormControlEventArgs e)

    {
    FormRun element = sender.formRun();

    //form control

    FormControl modelGroupRef = element.design(0).controlName("ModelGroupId");

    Info(strfmt(“Model Group %1”, modelGroupRef.valueStr()));

    //form parameter

    ItemId itemId = element.parmItemId();

    }

    Post handler for class method

    [PostHandlerFor(classStr(EcoResProductReleaseManager), methodStr(EcoResProductReleaseManager, release))]

    public static void EcoResProductReleaseManager_Post_release(XppPrePostArgs args){
    EcoResProductReleaseManager releaseMgr;

    //Getting the class object

    releaseMgr = args.getThis();

    //Getting the class parameter

    ItemId itemId = releaseMgr.parmItemId();

    //Getting the method argument

    boolean itemCreation = args.getArg("_isCreation");

    }

    Post handler for overriding table methods modified field and validate Write

    [PostHandlerFor(tableStr(InventTable), tableMethodStr(InventTable, validateWrite))]

    public static void InventTable_Post_validateWrite(XppPrePostArgs args)

    {
    InventTable inventTable = args.getThis() as InventTable

    boolean ret = true;

    // Override the validations here and set the return value accordingly.

    Args.setReturnValue(ret);

    }

    [PostHandlerFor(tableStr(InventTable), tableMethodStr(InventTable, modifiedField))]

    public static void InventTable_Post_modifiedField(XppPrePostArgs args)

    {
    //Getting the table buffer

    InventTable inventTable = args.getThis() as InventTable

    //Getting the field id method argument.

    FieldId fieldModified = args.getArg("_fieldId");

    switch (fieldModified)

    {
    //Here you can write your logic on modified field method

    break;

    }

    }

    窗体内的方法

    [ExtensionOf(formStr(PurchTable))]
    final class RIC_PurchTable_Extension
    {
    /// <summary>
    ///
    /// </summary>
    /// <param name="args"></param>
    [PostHandlerFor(formStr(PurchTable), formMethodStr(PurchTable, updateControlsForFrenchConfirmedPO))]
    public static void PurchTable_Post_updateControlsForFrenchConfirmedPO(XppPrePostArgs args)
    {
    FormRun sender = args.getThis();
    FormDataSource purchTable_DS;
    PurchTable purchTable;
    boolean canEnable;
    if (PublicSectorUtils::isFrenchRegulatoryEnabled())
    {
    purchTable_DS = sender.dataSource(formDataSourceStr(PurchTable, PurchTable));
    purchTable = purchTable_DS.cursor();
    canEnable = purchTable.canModifyPurchaseOrder();
    purchLine_PurchPriceGrid.allowEdit(canEnable);
    }
    }

    }
    Override Form DataSource method using Extensions in D3fO
    [FormDataSourceEventHandler(formDataSourceStr(SalesTable, SalesLine), FormDataSourceEventType::Activated)] public static void SalesLine_OnActivated(FormDataSource sender, FormDataSourceEventArgs e) { FormDataSource fds = sender.formRun().dataSource("SalesLine"); SalesLine salesline = fds.cursor(); FormRun fr = sender.formRun(); FormControl fc = fr.design(0).controlName("CreateServiceOrder"); if(salesLine.ProjID) { fc.enabled(true); } else { fc.enabled(false); } }
    ————————————————
    版权声明:本文为CSDN博主「mahailiang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/mahailiang/article/details/80080209

  • 相关阅读:
    LeetCode:删除有序数组中的重复项
    ABAP新语法之内联声明
    SAL实战练习-全选及按钮事件等
    固定资产创建BAPI_FIXEDASSET_CREATE--含扩展结构字段EXTENSIONIN
    SAP-采购订单-数据输入校验
    外围系统传SAP---OUT2SAP接口测试
    SAP2OUT异步接口测试
    SAP2OUT同步接口测试
    SAP-批量创建货源清单
    BDC-用户锁定及有效期设置程序
  • 原文地址:https://www.cnblogs.com/lingdanglfw/p/15546053.html
Copyright © 2011-2022 走看看