EAS工作流程

2 篇文章 0 订阅

1.客户端快捷键
搜bb(币别)—>Ctrl+shift+q 打开后门(可以写SQL语句)
查看异常信息 Ctrl+E
管理员客户端修改菜单 Ctrl+Shift+Alt+k

2.发布:
金蝶BOS业务建模工具 发布–》Java项目刷新–》金蝶BOS设计开发工具 发布

金蝶BOS业务建模工具
    发布模块(把模块部署到服务器里)
金蝶BOS设计开发工具
    发布代码(可以理解为编译代码吧)

3.事件里怎么调用方法?
先引过一个工厂类.getRemoteInstance()[客户端]; //如:ICSSMaterialConstrast instance=CSSMaterialConstrastFactory.getRemoteInstance();
然后用instance GET出你在APP端写的方法(提前刷新、发布)

4.EditUI.UI 是 新增时出现的窗体(有 界面配置 等等工具栏)
里面可以有 表头、分录、按钮等…
5.ListUI.UI 是 显示已录入的数据(有 高级统计 等等工具栏)

6.添加按钮:
app.ConstrastBean.java –> 自己在这里写业务逻辑代码
@Override _syndata (){} //重写有下划线的方法
client.ConstrastEditUI.java –> 新建的 客户端代码可以在这里写,比如计算用户输入的金额啊,验证用户的输入内容
client.ConstrastListUI.java –> 客户端代码可以在这里写,比如写用户选了几行哪些行啊
.entety 带锤子图标的文件是实体类

禁用增删改按钮
this.btnAddNew.setEnabled(false);
this.btnRemove.setEnabled(false);
this.btnEdit.setEnabled(false);

7.操作数据库
DbUtil在服务端用操作EAS—》com.kingdee.bos.ctrl.extcommon.server.DbUtil——/com.kingdee.eas.util.app.DbUtil
BaseDao在服务端用操作CSS—》com.kingdee.eas.yfscmdevelop.util.db.BaseDao
ctx 在服务端用

    /*dialect*/         方言
    MsgBox.showConfirm2("同步失败,详情见日志!");     //这是操作客户端的弹窗
NEWBOSID('aaaaaaa');                        //创建FID
BOSUuid enpk = BOSUuid.create("4488014C");  //创建FID

关联ID
        MaterialInfo materialInfo = new MaterialInfo(); //创建对象
        materialInfo.setId(BOSUuid.read(rowFid.getString("FID")));      //创建ID
// 刷新客户端列表界面
 actionRefresh_actionPerformed(null);

8.用对象操作数据库

检测某值在表中是否存在

    ICSSDepartConstrast instance= CSSDepartConstrastFactory.getLocalInstance(ctx);
    if(instance.exists("where <属性名称>='"+<value>+"'")){
        String ex="CSS分店/部门编码已经存在,不能重复!";
        throw new TaskExternalException(ex);
    }

9.刷新

//LISTUI 序时簿列表界面刷新
actionRefresh_actionPerformed(null);

//EDITUI 编辑界面刷新
this.setDataObject(getValue(new ObjectUuidPK(editData.getId())));
this.setOprtState(OprtState.VIEW);  
this.loadFields();  

更改了entity或者UI等界面内容,想看到效果,则要发布(元数据、业务单元) 刷新(Java代码,看是否偶报错) 重启客户端 后有效

10.打包所需文件
deployed_metas和classes这两个目录里需要打包的项目
在hn_scgl_matas/entity_pkmapping.properties里面加完整模块

11.BOS启动EAS配置runtime:F:\ctf\workspace\Project_cft_hn\runtime\apusic\config

12.新增单据时自动填写默认数据:在***EditUI.java 下重写父类方法【createNewData()】分录在 createNewDetailData()

protected com.kingdee.bos.dao.IObjectValue createNewData() {
        //获取info对象
        com.kingdee.eas.projectbudget.basedata.ProjectGInfo objectValue = new com.kingdee.eas.projectbudget.basedata.ProjectGInfo();

        //设置创建人
        objectValue.setCreator((com.kingdee.eas.base.permission.UserInfo)
            (com.kingdee.eas.common.client.SysContext.getSysContext().getCurrentUser()));

        Date date = new Date();
        SimpleDateFormat simp = new SimpleDateFormat("yyyyMMddHHmmss");
        String str = simp.format(date);
        //设置编码
        objectValue.setNumber(str);
        //返回info对象
        return objectValue;
    }

写insert语句时,加一下(对大量插入数据时才加) insert /+append/ into test select * from t1 nologging 写insert语句时,加一下 /+append/ 和 nologging

当前模式:
//EASList界面设置打开的Edit界面模式

    @Override
    protected String getEditUIModal() {
        // TODO Auto-generated method stub
        return UIFactoryName.MODEL;
    }

导入:

    public void actionImportData_actionPerformed(ActionEvent e) throws Exception
    {
        String solutionName="RCSRefLocationImport"; //导入模块编码
        String alias="RCS位置对照表导入";          //导入模块名称
        DataImportUtil.dataImport(this, solutionName, alias);   //导入工具方法
        super.actionImportData_actionPerformed(e);
    }

禁止更改基础资料字段值:

    @Override
    public void onLoad() throws Exception {
        super.onLoad();
        txtNumber.setEditable(false);
        txtName.setEditable(false);
    }

单据编码、FNUMBER生成

/**
 * 单据编号
 * @param stockinfo
 * @param stockid
 * @return 编号
 * @throws BOSException
 * @throws EASBizException
 */
private static String generateBillNumber(IObjectValue stockinfo, BOSUuid stockid) throws BOSException, EASBizException 
{
    ICodingRuleManager iCodingRuleManager =CodingRuleManagerFactory.getRemoteInstance();
    String number=iCodingRuleManager.getNumber(stockinfo,stockid.toString());
    return number;
}

oracle繁体转简体函数: HN_TRANS_CHINESE

//IObjectValue 值对象传递中间件,比如我从客户端的A对象要传到服务端,就先将A对象转为IObjectValue,在服务端可以讲IObjectValue强转为A对象

protected IObjectPK _save(Context ctx, IObjectValue model) {
    A对象 AInfo = (A对象)model;
}

添加默认行值

@Override
public void onShow() throws Exception {
    // TODO Auto-generated method stub
    super.onShow();
    IRow row;
    ICell cell;
    for (int i = 0; i < 6; i++) {

        // 添加空表体行
        row = kdtEntrys.addRow(i);
        for (int j = 0; j < 3; j++) {

            // 获取表头行的单元,并设置单元的值

            cell = row.getCell(j);

            cell.setValue("body " + i + " " + j);
        }
    }
}

经典代码

@Override
protected void _syndata(Context ctx, String[] expenseTypeID) throws BOSException {
    //first get interface
    ICSSExpenseTypeConstrast si = CSSExpenseTypeConstrastFactory.getLocalInstance(ctx); //工厂类里
    CSSExpenseTypeConstrastCollection c = si.getCSSExpenseTypeConstrastCollection();
    if(null == c||c.isEmpty()){     //判断是否选中行
        return;                     //没选中的话就不执行一下代码
    }
    CSSExpenseTypeConstrastInfo csse = null;
    for(int i=0;i<c.size();i++){
        csse=c.get(i);
         System.out.println(c.get(i));
         System.out.println(csse.getCssUsed().getName());
    }
    //逻辑
    //expenseTypeID[0]
    int i = expenseTypeID.length;
    for(String strId: expenseTypeID){
        System.out.println(strId+i);
    }
    System.out.println(8888);
    super._syndata(ctx, expenseTypeID);
}

过滤器:
if(getDataString(hsData,”FEasMaterialNum_number”).trim()!=”“){
String fNumber = getDataString(hsData,”FEasMaterialNum_number”).trim();
EntityViewInfo evi = new EntityViewInfo(); //创建实体视图
FilterInfo f = new FilterInfo();//创建过滤对象 //发单费用
FilterItemInfo filter1 = new FilterItemInfo(“Number”, fNumber, CompareType.EQUALS);//创建第一个过滤条件,第一个参数:所查询的实体的属性,第二个参数:属性的目标值,第三个参数:比较符
f.getFilterItems().add(filter1);//将过滤条件添加到过滤对象中
evi.setFilter(f);//设置实体视图的过滤器

    MaterialCollection supplierCollection=MaterialFactory.getLocalInstance(ctx).getMaterialCollection(evi);
    if(supplierCollection.size()!=0){
        MaterialInfo materialInfo= new MaterialInfo();
        materialInfo=supplierCollection.get(0);
        coreBaseInfo.setEasMaterialNum(materialInfo);           
    }else throw new TaskExternalException("EAS物料_编码不存在");

设置当前用户与日期

ObjectSetInform.setCreateInform(ctx, materialGroupInfo);

/**是否弹出查询**/
@Override
protected boolean initDefaultFilter() {
    return true;
}

//获取序时簿选中行id

int[] rows = KDTableUtil.getSelectedRows(tblMain);
String id=tblMain.getRow(rows[i]).getCell("id").getValue().toString();

//通过行id获取info对象

SCPurRequestInfo purRequestInfo = purRequest.getSCPurRequestInfo(new ObjectUuidPK(id));

//设置单据分录标题 **EditUI.java

@Override
public void onShow() throws Exception {
    super.onShow();
    this.kdtEntrys_detailPanel.setTitle("分录1标题");
    this.kdtDEntrys_detailPanel.setTitle("分录2标题");
}

5:如何给F7控件设置过滤条件

当需要对F7控件所打个视图中的内容进行过滤时,可对F7控件设置过滤条件,使用方法如下:

EntityViewInfo evi = new EntityViewInfo(); //创建实体视图
FilterInfo f = new FilterInfo();//创建过滤对象
FilterItemInfo filter1 = new FilterItemInfo("number", "SHFL001", CompareType.GREATER);//创建第一个过滤条件,第一个参数:所查询的实体的属性,第二个参数:属性的目标值,第三个参数:比较符
FilterItemInfo filter2=  new FilterItemInfo("age", "20", CompareType.GREATER);//创建第二个过滤条件
f.getFilterItems().add(filter1);//将过滤条件添加到过滤对象中
f.getFilterItems().add(filter2);
f.setMaskString("#0 or #1");//设置两个过滤条件之间的关系
evi.setFilter(f);//设置实体视图的过滤器
f7.setEntityViewInfo(evi);//将实体视图绑定到F7控件
f7.getQueryAgent().resetRuntimeEntityView();

控制单据增删改

this.btnAddNew.setVisible(false);
this.btnRemove.setVisible(false);
this.btnEdit.setVisible(false);
this.btnCopyTo.setVisible(false);

this.menuItemAddNew.setVisible(false);
this.menuEdit.setVisible(false);

this.btnAddNew.setEnabled(false);
this.btnRemove.setEnabled(false);
this.btnEdit.setEnabled(false);
this.btnCopyTo.setEnabled(false);

this.menuItemAddNew.setEnabled(false);
this.menuEdit.setEnabled(false);

//F7必填设置

this.F7LabsInfo.setRequired(true);

–上查下查关系 关联关系

    INSERT INTO T_BOT_Relation(FID, FSRCENTITYID, FDESTENTITYID, FSRCOBJECTID, FDESTOBJECTID, FDATE, FOPERATORID, FISEFFECTED, FBOTMAPPINGID, FTYPE) 
    VALUES(NEWBOSID('59302EC6'), '044EE73C', '783061E3', ID1, purID, sysdate, v_UserID, 1, null, 0);    
    --【FTYPE=0:上查;FTYPE=1:下查】

//ListUI界面增加合计行 统计行
1.在.query里面设置两个扩展属性
是否统计字段:true
统计字段按主键进行统计:设置为主键字段名,比如(id,entrys.id),
如果不设置的话,统计的时候会按分录行统计,对非分录行统计出来的结果会不正确。

2.在ListUI.java中重写isFootVisible方法,将返回值设置为true。  

    @Override  protectedbooleanisFootVisible() {
        return true;     
    } 

//EditUI分录增加合计行
重写EditUI的setTableToSumField方法即可。

@Override
protected void setTableToSumField() {   
    super.setTableToSumField(); 
    setTableToSumField(kdtEntrys, new String[] {"amount",  "paymentAmount"});    
}  
//其中kdtEntrys—table名称 (通常为kdtEntrys)
//new String[] {}统计的字段名     

//*_dataChanged(DataChangeEvent e)
说明:单据上某一字段的值改变时,触发此方法

//sql查询分析器:获取表名、获取表所有列、执行sql、根据bostype获取表名
com.kingdee.eas.fm.common.app.FMIsqlFacade

//根据id获取bostype

BOSObjectType bosType = BOSUuid.read(sourceId).getType();

//用户(com.kingdee.eas.base.permission.User)与员工_个人信息(com.kingdee.eas.basedata.person.Person)
关联关系:com.kingdee.eas.base.permission.app.R_User_Person
User.person = Person.id

在脚本中执行SQL语句
java.lang.StringBuffer sql = java.lang.new StringBuffer();
//将 SQL 语句保存到 sql 对象中

    java.sql.Connection con =
    com.kingdee.bos.framework.ejb.EJBFactory.getConnection(__bosContext);
    java.sql.Statement batchStatement = con.createStatement();
    batchStatement.execute(sql.toString());
    com.kingdee.util.db.SQLUtils.cleanup(batchStatement, con);
    com.kingdee.util.db.SQLUtils.cleanup(con);

//隐藏EditUI分录上面板上的 添加行 插入行 删除行 的按钮(禁用则使用

setEnabled)
    this.kdtPaymentInfoEntry_detailPanel.getAddNewLineButton().setVisible(false);
    this.kdtPaymentInfoEntry_detailPanel.getInsertLineButton().setVisible(false);
    this.kdtPaymentInfoEntry_detailPanel.getRemoveLinesButton().setVisible(false);

//table空白行也保存

kdtEntrys.getRow(i).setChange(true);

//如果要新增请按照如上内容格式在本地增加测试通过后,由权限模块负责人员添加到权限模块
注:如果不能生效,删除如下数据:

    delete * from T_PM_SpecialDataPermEntry
    delete * from T_PM_SpecialDataPerm

//调用list序时簿前的过滤query

    @Override
    protected void beforeExcutQuery(EntityViewInfo ev) {
        FilterInfo filterInfo = new FilterInfo();
        UserInfo userInfo = SysContext.getSysContext().getCurrentUserInfo();
        filterInfo.getFilterItems().add(
        new FilterItemInfo("creator.id", userInfo.getId(), CompareType.EQUALS));
        filterInfo.setMaskString("#0");
        ev.setFilter(filterInfo);
        super.beforeExcutQuery(ev);
    }

//用户过滤界面基类

com.kingdee.eas.framework.report.client.CommRptBaseConditionUI

//用户过滤界面+自定义

com.kingdee.eas.scm.common.client.SCMBillFilterUI

//报表界面基类

com.kingdee.eas.framework.report.client.CommRptBaseUI

报表:
两个UI(ListUI、QueryUI)、一个功能facade
QueryUI:继承com.kingdee.eas.framework.report.client.CommRptBaseConditionUI
ListUI: 继承com.kingdee.eas.framework.report.client.CommRptBaseUI
Facade: 继承com.kingdee.eas.framework.report.app.CommRptBase

QueryUI.Java:
//在构造函数里初始化控件值

@Override
public RptParams getCustomCondition() {
    获取前端面板的限制条件(用户所选),然后用RptParams储存并返回,供facade调用
    RptParams params = new RptParams();
    params.setObject("asstActNumber", F7LabsInfo.getText());
    params.setObject("asstActName", kDDatePicker1.getText());
    params.setObject("pdnOutMonth", kDBizComboBox1.getSelectedItem());
    return params;
}

@Override
public void setCustomCondition(RptParams arg0) {
    // 保存历史方案
    kDDatePicker1.setValue(arg0.getObject("asstActName"));
}

ListUI.Java:
//初始化(构造方法)
//展示数据

public ProjectBalanceRptUI() throws Exception
{
    super();

    final int pageSize = 1000;
    kDTable1.checkParsed();
    kDTable1.getDataRequestManager().setDataRequestMode(1);
    enableExportExcel(kDTable1);

    kDTable1.getDataRequestManager().setDataRequestMode(KDTDataRequestManager.VIRTUAL_MODE_PAGE);
    kDTable1.getDataRequestManager().setPageRowCount(pageSize);
    //kDTable1.setRowCount(500);
    kDTable1.getDataRequestManager().addDataRequestListener(new KDTDataRequestListener()
    {
        public void tableDataRequest(KDTDataRequestEvent e)
        {
            // 获取请求的起始行、起始列、结束行、结束列信息
            int firstRow = e.getFirstRow();
            int lastRow = e.getLastRow();
            int firstCol = e.getFirstCol();
            int lastCol = e.getLastCol();
            int colCount = lastCol - firstCol + 1;
            params.setInt("pageSize", pageSize);
            params.setInt("startIndex", firstRow);
            try {
                RptParams rpt = getRemoteInstance().query(params); // 调用远程接口,查询数据
                RptRowSet rs = (RptRowSet) rpt.getObject("arapData"); // 数据集

                doAfterQuery(rs);
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    }
    );
}

protected void doAfterQuery(RptRowSet rs) throws Exception {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    while (rs.next()) {
        IRow addRow = kDTable1.addRow();
        addRow.getCell(0).setValue(rs.getString("FID"));
        addRow.getCell(1).setValue(rs.getString("FNUMBER"));
        addRow.getCell(2).setValue(rs.getString("FBIZDATE"));
    }
}

//绑定QueryUI
@Override
protected CommRptBaseConditionUI getQueryDialogUserPanel() throws Exception {
    return new ProjectBalanceWhereUI();
}

//绑定Facade
@Override
protected ICommRptBase getRemoteInstance() throws BOSException {
    return ProjectBalanceFacadeFactory.getRemoteInstance();
}

@Override
protected void query() {
    kDTable1.checkParsed();
    kDTable1.removeRows();  
}

Facade:

@Override
protected RptParams _query(Context ctx, RptParams params) throws BOSException, EASBizException {
    //获取前端的限制条件,用于SQL where
    String asstActNumber = params.getObject("asstActNumber").toString();
    String pdnOutMonth = params.getObject("pdnOutMonth").toString();

    String sql = "SELECT * FROM T_PRO_ProjectDetail";

    RptRowSet rptRowSet = executeQuery(sql, null, ctx);
    RptParams rpt = new RptParams();
    rpt.setObject("arapData", rptRowSet);
    return rpt;
}

getQueryDialogUserPanel

//位运算//

乘以2运算 n << 1

除以2运算//负奇数的运算不可用 n >> 1

乘以2的m次方//计算n*(2^m) n << m

除以2的m次方//计算n/(2^m) n >> m

判断一个数的奇偶性 (n & 1) == 1

求两个整数的平均值 (x + y) >> 1

计算n+1 -~n

计算n-1 ~-n

取相反数 ~n + 1

交换两个值(异或)
int i = 50;
int o = 90;
i = i ^ o;
o = i ^ o;//i ^ o ^ o = i ^ 0
i = i ^ o;

System.out.println(i);//90

//cmd.exe 文件执行不了,提示无合适的权限
找到文件 C:\Windows\System32\cmd.exe
找到属性-安全-编辑权限:添加用户:Everyone
再勾选所有权限

//分录表格数据项增加值改变事件
1、声明值改变监听事件

@Override
public void onLoad() throws Exception {
    super.onLoad();

    // 分录表格增加值修改监听事件
    kdtEntrys.addKDTEditListener(
        new KDTEditAdapter() {
            public void editStopped(KDTEditEvent e) {
                try {
                    kdtEntrys_Changed(e.getRowIndex(), e.getColIndex());
                } catch (Exception exc) {
                    handUIException(exc);
                }
            }
        }
    );
}

2、实现值改变事件
public void kdtEntrys_Changed(int rowIndex, int colIndex) throws Exception {
if (“kssj”.equalsIgnoreCase(kdtEntrys.getColumn(colIndex).getKey())) {
MsgBox.showInfo(com.kingdee.bos.ui.face.UIRuleUtil.getString(kdtEntrys.getCell(rowIndex, “kssj”).getValue()));
}
if (“sl”.equalsIgnoreCase(kdtEntrys.getColumn(colIndex).getKey())) {
kdtEntrys.getCell(rowIndex, “hj”).setValue(com.kingdee.bos.ui.face.UIRuleUtil.getBigDecimal(com.kingdee.bos.ui.face.UIRuleUtil.getBigDecimalValue(kdtEntrys.getCell(rowIndex, “sl”).getValue()) * com.kingdee.bos.ui.face.UIRuleUtil.getBigDecimalValue(kdtEntrys.getCell(rowIndex, “dj”).getValue())));
}

    if ("dj".equalsIgnoreCase(kdtEntrys.getColumn(colIndex).getKey()))
    {
       kdtEntrys.getCell(rowIndex, "hj").setValue(com.kingdee.bos.ui.face.UIRuleUtil.getBigDecimal(com.kingdee.bos.ui.face.UIRuleUtil.getBigDecimalValue(kdtEntrys.getCell(rowIndex, "sl").getValue()) * com.kingdee.bos.ui.face.UIRuleUtil.getBigDecimalValue(kdtEntrys.getCell(rowIndex, "dj").getValue())));
    }
}

//分录列值改变事件

@Override
public void kdtEntrys_Changed(int rowIndex, int colIndex){
    if ("coll_1".equalsIgnoreCase(kdtEntrys.getColumn(colIndex).getKey())) {
    }
}


public void actionEdit_actionPerformed(ActionEvent e) throws Exception
{
    int[] rows = KDTableUtil.getSelectedRows(tblMain);
    int len = rows.length;
    if (len == 0) {
        MsgBox.showInfo("未选中记录!");
        return;
    }
    IRow row = tblMain.getRow(rows[0]);
    String id=row.getCell("id").getValue().toString();
    PurchoseRequsetBillInfo purchoseRequsetBillInfo=PurchoseRequsetBillFactory.getRemoteInstance().getPurchoseRequsetBillInfo(new ObjectUuidPK(id));

    if (purchoseRequsetBillInfo.getBillBaseStatus() != null && purchoseRequsetBillInfo.getBillBaseStatus().equals(BillBaseStatusEnum.AUDITED)) 
    {
        MsgBox.showInfo("已审核的单据不允许修改!");
        return;
    }
    if (purchoseRequsetBillInfo.getDataSource() != null && purchoseRequsetBillInfo.getDataSource().equals(com.kingdee.eas.sckf.fhp.base.DataSourceEnum.SYSTEMSYNC)) 
    {
        MsgBox.showInfo("同步生成的单据不允许修改!");
        return;
    }
    if (BillApplyFactory.getRemoteInstance().checkBizObjInWfProcess(id))
    {
        MsgBox.showWarning("单据进行工作流,不允许操作!");
        return;
    }

    super.actionEdit_actionPerformed(e);
}

@Override
protected CommonQueryDialog initCommonQueryDialog() {
    CommonQueryDialog dialog = super.initCommonQueryDialog();
    dialog.addUserPanel(getBillFilterUI());
    dialog.setWidth(500);
    dialog.setHeight(450);
    dialog.setTitle("自定义查询");
    // dialog.addUserPanel(this.getTitlePanel());
    dialog.setShowFilter(true);
    dialog.setShowSorter(true);
    return dialog;
    //return super.initCommonQueryDialog();
}

//WSGLWebServiceFacadeSrvProxyProxy deleteVoucher(pro.getCompany(), period, voucherNumber, fexp)
//删除凭证的方法
//生成凭证接口、方法
//生成凭证

IGLWebServiceFacade iGLW = GLWebServiceFacadeFactory.getLocalInstance(ctx);
String[] str2 = iGLW.importVoucherOfReturnID((WSVoucherCollection)getBeanConvertor().toObjectCollection(MetaDataHelper.getEntityMetaData("com.kingdee.eas.fi.gl.app.WSVoucher"), vouchers), 1, 0, 0);

//凭证返回结果:
成功:[0000||记||2017||12||成功保存||记-0010||AcB7mA9DRLisgQmpPwX0ZSZS4B4=]
失败:[1002||null||0||0||凭证TZ20171220204230凭证分录1没有找到科目:6666]

//日期转换格式

    SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK);
    Date beginDate = sdf.parse(beg.toString());
    Date endDate = sdf.parse(end.toString());
    long day=(endDate.getTime() - beginDate.getTime()) / (24*60*60*1000); 
    int dayNum = Integer.parseInt(Long.toString(day));

//不建议使用函数/方法
/* @deprecated /

String id = “IssAAAAEgGf67oE6”; //ID
IObjectPK pk = new ObjectStringPK(id); //主键

//通过主键获取对象
DemoInfo demo = DemoFactory.getRemoteInstance().getDemoInfo(pk);

//ID、UUID、PK之间转换
BOSUuid uuid = demo.getId(); //UUID
pk = new ObjectUuidPK(uuid); //主键
uuid = BOSUuid.read(id); //UUID
demo.setId(BOSUuid.create(demo.getBOSType())); //设置新UUID

//客户端获取登录人信息
UserInfo userInfo = SysContext.getSysContext().getCurrentUserInfo();
//服务端获取去登录人信息
ContextUtil.getCurrentUserInfo(ctx).getPerson()

//获取分录某字列的合计数:
com.kingdee.bos.ui.face.UIRuleUtil.sum(kdtEntrys,”subtotal_sum”)

//生成凭证返回值:
成功:[0000||记||2018||1||成功保存||记-0004||nF8mNESjR4ea+6C95eZjyyZS4B4=]

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值