AX2009 C#客户端通过Web service批量审核工作流(二)

配置好Web service后就可以开发和发布Service

先创建ClassWorkflowApprovalServiceClass,添加方法dataList,返回当前用户需要审批的工作流记录ID

public str  dataList()
{
    WorkflowWorkItemTable       workItem;
    container   con;

    while select  RecId from workItem where workItem.UserId==curuserid()
                                        &&  workItem.Status==WorkflowWorkItemStatus::Pending
                                        &&  workItem.Type==WorkflowWorkItemType::WorkItem
        con+=workItem.RecId;
    if(con)
        return con2str(con);
    else
        return "";
}

AX2009返回值的类型只支持以下几种简单类型

private static boolean validateParamType(Types _type, int _typeId)
{
    boolean isValid;
    SysDictType dictType;
    SysDictClass dictClass;
    ;
    if(_type == Types::Class)
    {
        dictClass = new SysDictClass(_typeId);

        // Check if class implements AifXmlSerializable.
        isValid = dictClass.isImplementing(classnum(AifXmlSerializable));
    }
    else    // built-in type.
    {
        switch(_type)
        {
            case(Types::UserType):
            {
                dictType = new SysDictType(_typeId);
                isValid = AifServiceGenerationManager::validateParamType(dictType.baseType(), _typeId);
                break;
            }
            case(Types::String):
            case(Types::RString):
            case(Types::VarString):
            case(Types::Date):
            case(Types::UtcDateTime):
            case(Types::Guid):
            case(Types::Integer):
            case(Types::Int64):
            case(Types::Enum):
            case(Types::Real):
            case(Types::void):
            {
                isValid = true;
                break;
            }
            case(Types::AnyType):
            case(Types::BLOB):
            case(Types::Container):
            case(Types::Record):
            case(Types::Time):
            default:
            {
                isValid = false;
            }
        }
    }

    return isValid;
}

添加审批方法批准和拒绝

public void updateApprove(recId    _recid,str _comment="")
{
    WorkflowWorkItemTable _workItem=WorkflowWorkItemTable::findRecId(_recid);
    ;

    WorkflowWorkItem::takeAction(_workItem.Id,
                                        WorkflowWorkItemActionManager::findOutcomeNameForMenuItem(_workItem,
                                                                                                "PurchApprovalApprove",//工作流批准的菜单项
                                                                                                false),
                                                                                                _comment,
                                                                                                curuserid());
}
public void updateReject(recId    _recid,str _comment="")
{
    WorkflowWorkItemTable _workItem=WorkflowWorkItemTable::findRecId(_recid);
    ;

    WorkflowWorkItem::takeAction(_workItem.Id,
                                        WorkflowWorkItemActionManager::findOutcomeNameForMenuItem(_workItem,
                                                                                                "PurchApprovalReject",//工作流拒绝菜单项
                                                        false), _comment, curuserid()); }

再添加一些需要显示参考的字段方法就可以了

接下来就到AOT-Services中增加一个Service/WorkflowApprovalService

将属性中的Class指向上面创建的Class/WorkflowApprovalServiceClass

另外还需要添加securityKey,否则在客户端调用时会出错

然后打开Service/WorkflowApprovalService,在operations右键添加operation,系统会自动将Class上符合要求的方法显示出来,添加需要的方法,保存即可

最后是打开上一篇中的设置服务,刷新后选择服务发布就可以了

原文地址:https://www.cnblogs.com/rumenren/p/4894726.html