Posted: Fri Dec 21, 2007 12:12 pm Post subject: Workflow: проверка, что объект создан
Привет!
Столкнулся с проблемой при разработке бизнес процесса в Workflow.
В бизнес объекте Purcahse Requsition существует ссылка на объект Sap user 'USR01'. В случае, если имя пользователя не существует в системе (это случается в документах, приходящих через IDOC), объект USR01 не создается. И при попытке отослать письмо пользователю, выполнение прерывается с ошибкой.
Пытаюсь в построителе Workflow (SWDD) вставить проверку, что объект не пустой,
USR01 <> ''
выдается ошибка:
Operation '<>' between data type 'o' and '' not allowed.
То есть при проверке, можно ссылаться на атрибуты, но не на сам объект. Например так проходит
USR01.User name <> ''
Как можно проверить, что объект создан именно в построителе Forkflow? Как включить такую проверку через атрибуты бизнес объекта разобрался, но это требует программирования и не всегда возможно из-за необходимости модификации SAP объектов.
Второй вопрос, чем отличается element от property в макросах?
SWC_GET_ELEMENT
SWC_GET_PROPERTY
Age: 46 Joined: 05 Nov 2007 Posts: 725 Location: КраснАдар
Posted: Fri Dec 21, 2007 1:22 pm Post subject:
Несколько непонятно, что нужно.
Для проверки формирования инстанции в любом бизнес-объекте существует стандартный метод ExistenceCheck. Можно сделать задачку на его основе, к примеру.
Хотя верным будет также проверять ключевые поля бизнес-объекта на заполнение ( в Вашем случае поле BNAME таблицы USR01, елемент контейнера ID).
По второму вопросу. Кажется, что swc_get_element беерет значение в контейнере своей задачи, а swc_get_property может заглянуть и в чужой контейнер. Но точной уверенности нет, могу ошибаться.
Сам использую только swc_get(set)_element(table).
John Doe, спасибо за Ваш ответ. С workflow я тесно не сталкивался, нужно испровить ошибку при отправке почты.
Попытался проверить, что атрибут BNAME бизнес объекта USR01 не пустой, и сразу получаю ошибку, потому что происходит попытка добраться до атрибута, объект которого не создан.
У нас так написано, что если BNAME не реальный, то и бизнес объект USR01 не создан.
Пошел по другому пути, создал атрибут IsRequisitionerValid для бизнес объекта, который проверяет, что USR01 вилиден, и если да, выставляет этот атрибут в 'X'. Вроде работает.
Проверку делаю через handle объекта
swc_get_property self 'PRCREATOR' lo_pRCREATOR.
swc_get_element почему то возращает возвращает ошибку - объект не найден.
Code:
GET_PROPERTY IsRequisitionerValid CHANGING CONTAINER.
DATA: lo_PRCREATOR TYPE swc_object.
swc_get_property self 'PRCREATOR' lo_pRCREATOR.
* swc_get_element CONTAINER 'PRCREATOR' lo_pRCREATOR.
IF NOT lo_pRCREATOR-handle IS INITIAL.
OBJECT-IsRequisitionerValid = 'X'.
ELSE.
CLEAR OBJECT-IsRequisitionerValid.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'IsRequisitionerValid'
OBJECT-IsRequisitionerValid.
END_PROPERTY.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.