You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将PL/SQL创建的Lookup Type设置为Oracle Workflow属性?

解决Workflow Lookup Type无法作为属性关联的问题

我之前也碰到过一模一样的情况,你已经通过包创建了Lookup Type和对应的Lookup Codes,但要让PL/SQL能关联到它,核心是把这个Lookup Type注册为Workflow Item Type的属性,具体步骤如下:

1. 注册Lookup Type为Workflow Item属性

你需要使用WF_ITEM_ATTRIBUTES_PKG.INSERT_ROW这个API,把你的Lookup Type绑定到对应的Workflow Item Type上。这个过程会在Workflow的属性字典里创建一条记录,让PL/SQL和Workflow引擎能识别到它。

示例代码如下:

BEGIN
  WF_ITEM_ATTRIBUTES_PKG.INSERT_ROW(
    P_ITEM_TYPE        => '你的Workflow Item Type名称', -- 比如'POAPPR'
    P_ATTRIBUTE_NAME   => '你的属性名称', -- 比如'APPROVAL_STATUS'
    P_ATTRIBUTE_TYPE   => 'LOOKUP_TYPE', -- 固定值,标记这是Lookup类型的属性
    P_FORMAT           => '你创建的Lookup Type名称', -- 比如'PO_APPROVAL_STATUSES'
    P_DISPLAY_NAME     => '审批状态', -- 可选,用于前端显示
    P_DESCRIPTION      => '采购单审批状态Lookup', -- 可选
    P_PROTECT_LEVEL    => '0', -- 0表示可修改,根据需求调整
    P_UPDATEABLE       => 'Y', -- 是否允许更新属性值
    P_START_DATE       => SYSDATE,
    P_END_DATE         => NULL
  );
  COMMIT; -- 别忘了提交事务
END;
/

2. 在PL/SQL中关联并使用这个属性

注册完成后,你就可以在PL/SQL里通过Workflow的API来操作这个属性了:

  • 获取属性值:使用WF_ENGINE.GET_ITEM_ATTR_VARCHAR2(如果是字符串类型的Lookup Code)
  • 设置属性值:使用WF_ENGINE.SET_ITEM_ATTR_VARCHAR2,并且可以用WF_LOOKUPS_PKG.VALIDATE_LOOKUP_VALUE来验证值是否属于你的Lookup Type

示例验证代码:

DECLARE
  l_valid BOOLEAN;
BEGIN
  -- 验证某个值是否属于你的Lookup Type
  l_valid := WF_LOOKUPS_PKG.VALIDATE_LOOKUP_VALUE(
    P_LOOKUP_TYPE => '你创建的Lookup Type名称',
    P_LOOKUP_CODE => '待验证的Code'
  );
  
  IF l_valid THEN
    -- 设置Workflow实例的属性值
    WF_ENGINE.SET_ITEM_ATTR_VARCHAR2(
      P_ITEM_TYPE => '你的Workflow Item Type名称',
      P_ITEM_KEY  => '对应的Workflow实例Key',
      P_ATTR_NAME => '你的属性名称',
      P_ATTR_VALUE => '待验证的Code'
    );
    COMMIT;
  ELSE
    RAISE_APPLICATION_ERROR(-20001, 'Invalid lookup code provided');
  END IF;
END;
/

3. 排查常见问题

如果还是关联不上,检查这几点:

  • 确认你创建Lookup Type时的P_APPLICATION_SHORT_NAME和Workflow Item Type的应用是否一致
  • 检查WF_ITEM_ATTRIBUTES表,确认属性记录已经存在,且ATTRIBUTE_TYPELOOKUP_TYPEFORMAT正确指向你的Lookup Type
  • 确保所有操作都已经提交事务,未提交的话PL/SQL会话可能看不到新创建的记录

内容的提问来源于stack exchange,提问作者sanket katariya

火山引擎 最新活动