Kingdee bos 典型的服务端Coding

<!-- [if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!-- [if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]-->

典型的服务端 Coding

服务端代码的编写主要针对 App 目录下的 PurOrderControllerBean 实现类,典型的代码有新增、修改、检验等操作,下面作分别介绍:

 

提交控制

 

用户在编辑界面上点击‘保存’按钮时应用框架会调用 PurOrderControllerBeansubmit 方法,通过重载 PurOrderControllerBean 父类的 submit 方法,可以对要新增、修改的数据进行校验、修正或做一些相关的判断:

 

protected IObjectPK _submit(Context ctx, IObjectValue model)

throws BOSException, EASBizException

  {

        PurOrderInfo purOrderInfo = (PurOrderInfo) model;

       

        // 记录是否是新增, false 表示是修改,据此可以作相关操作

        boolean isAddNew = true;           

if(purOrderInfo.getId()!=null&&_exists(ctx,new ObjectUuidPK(purOrderInfo.getId())))

{

               isAddNew = false;

        }

       

// 检查是否设置 number

//checkNumber(ctx, otherBillInfo);

 

// 调用父类的方法检查是否有重号

        //super._checkNumberDup(ctx, null, purOrderInfo );

       

        // 设置值对象中的一些默认值

        setDefaultValue(ctx, purOrderInfo);

       

        // 校验值对象中的属性是否合法

        checkValid(purOrderInfo);

       

        // 调用框架的提交方法

        return   super._submit(ctx, purOrderInfo);

}

对于用户在编辑界面上点击‘暂存’按钮时调用   _save(Context ctx, IObjectValue model)

方法, 其操作过程与调用 _submit 方法类似

_update(Context ctx, IObjectPK pk, IObjectValue model) 方法供更新操作调用

 

权限检查

 

先了解一下权限接口类提供的有关权限项检查的方法

     /**

     *

     * 描述:返回用户是否具有某项功能的权限

     * @param userPK                    验权用户 PK

     * @param orgPK                      验权组织 PK

     * @param permItemName         权限项名称

     * @return                                 true: 有权 false: 无权

     * @throws BOSException

     * @throws EASBizException

     * @author:ryanzhou

     */

      public boolean hasFunctionPermission(

            IObjectPK userPK,

            IObjectPK orgPK,

            String permItemName)

        throws BOSException, EASBizException;

   

    /**

     *

     * 描述:返回用户是否具有某项功能的权限

     * @param userPK                    验权用户 PK

     * @param orgPK                      验权组织 PK

     * @param uiPK                        UI 元数据 PK

     * @param actionPK                  业务操作的 PK

     * @return                                  true: 有权 false: 无权

     * @throws BOSException

     * @throws EASBizException

     * @author:ryanzhou

     */

      public boolean hasFunctionPermission(

            IObjectPK userPK,

            IObjectPK orgPK,

            IMetaDataPK uiPK,

             IMetaDataPK actionPK)

        throws BOSException, EASBizException;

   

    /**

     *

     * 描述:检查用户是否具有某项功能的权限 ,

     * 无权时会抛出包含提示信息的业务异常

     * @param userPK                    验权用户 PK

     * @param orgPK                      验权组织 PK

     * @param permItemName         权限项名称

     * @throws BOSException

     * @throws EASBizException

     * @author:ryanzhou

     */

      public void checkFunctionPermission(

            IObjectPK userPK,

            IObjectPK orgPK,

            String permItemName)

         throws BOSException, EASBizException;

   

    /**

     *

     * 描述:检查用户是否具有某项功能的权限 ,

     * 无权时会抛出包含提示信息的业务异常

     * @param userPK                    验权用户 PK

     * @param orgPK                      验权组织 PK

     * @param uiPK                        UI 元数据 PK 

     * @param actionPK                  业务操作的 PK

     * @throws BOSException

     * @throws EASBizException

     * @author:ryanzhou

     */

      public void checkFunctionPermission(

            IObjectPK userPK,

            IObjectPK orgPK,

             IMetaDataPK uiPK,

            IMetaDataPK actionPK)

        throws BOSException, EASBizException;

具体调用方法:

          com.kingdee.eas.base.permission.IPermission perm= null

       perm =PermissionFactory.getLocalInstance(ctx );

      perm.hasFunctionPermission(userPK, orgPK, uiPKactionPK);

通过返回 boolean 值确定是否具有相应的权限项,根据不同的应用场景调用不同的应用方法检验操作的功能权限或数据权限。

 

 

1)  凭证生成前的控制

 

通过重载父类的 _createVoucher 方法实现其控制, 在做凭证生成动作之前进行相关的     断或则修改

例如:

protected void _createVoucher(Context ctx, String billId)

throws BOSException, EASBizException

              {

                     IPurOrder purOrder= PurOrderFactory.getLocalInstance(ctx);

                     // 创建 pk 对象

                     ObjectUuidPK pk = new ObjectUuidPK(billId);

                    

                     // 在客户端获取用户信息

                     UserInfo currentUser = (UserInfo) ctx.get(SysContextConstant.USERINFO)

                    

                     // 根据 ID 返回当前的值对象

                     PurOrderInfo purOrderInfo ;

                     purOrderInfo = get PurOrderInfo (ctx, pk);

                    

                     // 作相关判断

                     if (purOrderInfo!= null)

{

                     Date billDate = purOrderInfo.getBillDate();

                            if (billDate != null)

{

// 作相应处里

                            }

 

                     // 已生成凭证,不能重复生成凭证

                     if (purOrderInfo.isFiVouchered())

{

                            throw new lBizException(*****);

                     }

                     if (BillStatusEnum.AUDITED.equals(purOrderInfo.getBillStatus()))

{

       // 此过程中自动生成凭证

                            purOrderInfo.setFiVouchered(true);

                            purOrderInfo.update(pk, otherBillInfo);

                     }

                }

         }

 

 

 

生成凭证

下面是具体生成凭证的典型代码,也可以通过 dap 平台配置生成凭证

              protected IObjectValue _genVoucher(Context ctx, String billID)

throws BOSException, EASBizException {

              // 生成凭证,并返回集合

              IObjectCollection tmpCollection = null;

             

              //dap 动态会计平台

              IDAPTransformer iDAPTransformer = DAPTransformerFactory.getLocalInstance(ctx);

              //

CoreBillBaseCollection coreTransCollection = new CoreBillBaseCollection();

              ObjectUuidPK pk = new ObjectUuidPK(billID);

             

              // 获取值对象

PurOrderInfo model = (PurOrderInfo) this.getValue(ctx, pk);

              coreTransCollection.add(model);

             

              // 获取转换后的凭证值对象

              tmpCollection=iDAPTransformer.transformAuto(coreTransCollection,

                                                                                    DAPVoucherTypeEnum.FIVoucher

) ;

 

              // 创建凭证实体对象接口

              IVoucher vchCtrl = (IVoucher) VoucherFactory.getLocalInstance(ctx);

              // 从集合众取出转换后凭证值对象

              VoucherInfo vch = (VoucherInfo) tmpCollection.getObject(0);

              VoucherInfo vch1 = new VoucherInfo();

              vch1 = vchCtrl.exteriorLazyLoad(vch, VoucherInfo.getDefaultSelector());

 

              return vch1;

       }

 

 

审核操作

 

通过重载父类的 _ audit 方法实现审核控制 , 如下代码所示:

protected void _audit(Context ctx, IObjectPK pk) throws BOSException, EASBizException {

              // 对参数的常用判断

              if ((pk == null)) {

                     throw new IllegalArgumentException();

              }

             

              // 当前用户

              UserInfo currentUser = (UserInfo) ctx.get(SysContextConstant.USERINFO) ;

             

              // 当前日期

              Date currentDate = new Date();

             

              // 检查单据是否存在

              // PurOrderBizException 是用户定义的异常类

              boolean exist = exists(ctx, pk);

              if (!exist)

{

                     throw new PurOrderBizException(PurOrderBizException.BILL_NOTEXIST);

              }

              PurOrderInfo purOrderInfo= getPurOrderInfo (ctx, pk);

             

              // 设置审核人

purOrderInfo.setAuditor(currentUser);

 

// 设置审核日期

              purOrderInfo.setAuditDate(currentDate);

             

              // 设置单据的状态为 已审核

              purOrderInfo.setBillStatus(BillStatusEnum.AUDITED);

             

              // 更新实体,完成审核标记

              update(ctx, pk, purOrderInfo);

       }

 

 

编码规则

下面是判断是否定义了编码规则:

       protected boolean isRuleAutoNumber( Context ctx,

PurOrderInfo purOrderInfo,

String strCompanyID)

                     throws EASBizException, BOSException

       {

              // 系统工具,判断字符窜是否为‘空’

              if (StringUtils.isEmpty(strCompanyID)) {

                     CompanyOrgUnitInfo aCompanyOrgUnitInfo = null;

                     if (purOrderInfo.getCompany() != null)

                     {

                            // 获取公司信息

                            aCompanyOrgUnitInfo = purOrderInfo.getCompany();

                     }

Else

{

       // 获取当前财务组织

 

       // ContextUtil 系统工具类,提供常用信息的获取

 

                            aCompanyOrgUnitInfo = ContextUtil.getCurrentFIUnit(ctx);

 

                     }

                     strCompanyID = aCompanyOrgUnitInfo.getId().toString();

              }

               

              // 编码规则管理类

              ICodingRuleManager iCodingRuleManager = null

iCodingRuleManager =CodingRuleManagerFactory.getLocalInstance(ctx);

 

              // 调用具体方法判断规则是否存在

if (iCodingRuleManager.isExist(otherBillInfo, strCompanyID))

{

                     return true;

              }

              return false;

       }

扩展开发

 

如图:

Bim 会添加一个 Ex 后缀的 java 类 , 该类继承自实现类。

 

 

如:

public class ReceiveBillControllerBeanEx

extends com.kingdee.eas.ma.crbg.app.ReceiveBillControllerBean

 

可以修改或覆盖 EAS 原有应用逻辑,应用框架会自动调用该类。

 

 

7) 对于工作流中人工节点修改完毕后通过调用服务端相应的方法出发下一个节点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值