核算维度后台赋值(弹性域字段赋值)会计科目,核算维度原创
金蝶云社区-刘志权
刘志权
3人赞赏了该文章 93次浏览 未经作者许可,禁止转载编辑于2024年12月06日 15:30:16
  1. 准备工作-创建测试单据

    1)单据标识:kdyq_flexqw

    2)分录新增两个字段,会计科目(kdyq_account),核算维度(kdyq_flexfield)

    image.png

  2. 增加空操作按钮(代码在插件中实现)代码解读

    public class FlexFieldDemo3  extends AbstractOperationServicePlugIn{

  3.    //

  4.    // 会计科目的主键ID, 需修改, 样例导入后需手动维护一条会计科目数据, 并启用"核算维度"

  5.    // 【库存现金】的主键id

  6.     private String VAL_BASEDATA = "1320125868361649152";


  7.     //【现金账户001】的主键id

  8.     private String VAL_FLEX2_BASEDATA = "2073176969289170944";


  9.     // 单据上的基础资料字段的基础资料类型所绑定的基础资料(即:会计科目)

  10.     private static String KEY_BASEDATAENTITYNUM = "bd_accountview";


  11.     // 样例单据页面编码

  12.     private static String KEY_BILLNUMBER = "kdyq_flexqw";


  13.     // 单据上的弹性域字段的标识

  14.     private static String KEY_FLEXFIELD = "kdyq_flexfield";


  15.     private final static Log logger = LogFactory.getLog(FlexFieldDemo3.class);


  16.     @Override

  17.     public void beforeExecuteOperationTransaction(BeforeOperationArgs e) {

  18.         super.beforeExecuteOperationTransaction(e);


  19.         // 查询基础资料-会计科目数据所启用的核算维度,第三个参数核算维度值asstactitem,第三个参数辅助属性auxpty

  20.         List<Long> flexPropertyIds = FlexService.getBaseUseFlexProperties(KEY_BASEDATAENTITYNUM, VAL_BASEDATA, "asstactitem");


  21.         // 获取待新建单据的单据实体类型 kdyq_flexqw(样例单据标识)kdyq_flexfield(弹性域字段)

  22.         MainEntityType entityType = EntityMetadataCache.getDataEntityType("kdyq_flexqw");

  23.         FlexProp flexFieldProperty = (FlexProp) entityType.findProperty("kdyq_flexfield");

  24.         int flexTypeId = flexFieldProperty.getFlexTypeId();


  25.         // 获取弹性域实体类型

  26.         FlexEntityType flexFieldEntityType = FlexEntityMetaUtils.getBasedataPropFlexEntityType(KEY_BILLNUMBER, KEY_FLEXFIELD, flexTypeId, flexPropertyIds);

  27.         // 创建一个弹性域实体对象

  28.         DynamicObject flexFieldVal = new DynamicObject(flexFieldEntityType);

  29.         DataEntityPropertyCollection properties = flexFieldEntityType.getProperties();

  30.         // 设置初始值

  31.         for (IDataEntityProperty prop : properties) {

  32.             String key = prop.getName();

  33.             if ("id".equals(key)) {

  34.                 continue;

  35.             }

  36.             if (!(prop instanceof BasedataProp)) {

  37.                 if (key.endsWith("_id")) {

  38.                     // 可不设置

  39.                     // prop.setValue(flexFieldVal, VAL_FLEX1_BASEDATA);

  40.                     continue;

  41.                 }


  42.                 String subKey = key;

  43.                 key = subKey.split("__")[1];

  44.                 switch (key) {

  45.                     case "f000028":

  46.                        // prop.setValue(flexFieldVal, VAL_FLEX1_TXT);

  47.                         break;

  48.                     default:

  49.                         break;

  50.                 }

  51.             } else {

  52.                 // 会计科目【库存现金】的核算维度【现金账号】的值【现金账户001】 (现金账号的编码f0004 

  53.                 prop.setValue(flexFieldVal, BusinessDataServiceHelper.loadSingle(VAL_FLEX2_BASEDATA, "cas_accountcash"));

  54.             }

  55.         }

  56.         // 将新创建的弹性域实体对象封装成可赋值给单据上弹性域字段数据的格式

  57.         FlexEntireData flexEntireData = new FlexEntireData();

  58.         flexEntireData.setFlexData(flexFieldEntityType, flexFieldVal);

  59.         long id = FlexService.saveFlexData(flexFieldEntityType, flexEntireData);

  60.         DynamicObject flexObject = (DynamicObject) flexFieldProperty.getComplexType().createInstance();

  61.         flexObject.set("id", id);

  62.         Map<String, Object> values = flexEntireData.getFlexValue();

  63.         flexObject.set("value", SerializationUtils.toJsonString(values));


  64.         // 创建单据数据,并给各字段赋值(含基础资料 & 弹性域字段)

  65.         DynamicObject demobillorgObj = BusinessDataServiceHelper.newDynamicObject(KEY_BILLNUMBER);

  66.         demobillorgObj.set("billno", "FlexFieldDemo2-0011");

  67.         demobillorgObj.set("billstatus", "A");


  68.         DynamicObjectCollection entryentity = demobillorgObj.getDynamicObjectCollection("entryentity");


  69.         DynamicObject dynamicObject = entryentity.addNew();

  70.         dynamicObject.set("kdyq_account",BusinessDataServiceHelper.loadSingle(VAL_BASEDATA, KEY_BASEDATAENTITYNUM));

  71.         dynamicObject.set("kdyq_flexfield",flexObject);


  72.         OperationResult result = SaveServiceHelper.saveOperate(KEY_BILLNUMBER, new DynamicObject[] { demobillorgObj }, OperateOption.create());

  73.         logger.info("result: " + result.getSuccessPkIds());



  74.                // IDataEntityProperty property = properties.get("$$kdyq_flexfield__f0004_id");

  75.                // property.setValue(kdyq_flexfield,1980521077037609984l);





  76.     }




  77. }

  78. 数据准备

    1)会计科目:{库存现金}

    2)【会计科目】对应【核算维度】的基础资料【现金账号】{现金户001}

    image.png

  79. 演示效果,点击空操作按钮,回到列表页面会计科目和核算维度插入值如下。

    image.png

图标赞 3
3人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!