Программа не выдает ошибку нарушения подписи, даже если идентификатор подписи отличается от объекта программы к служебной программе - PullRequest
0 голосов
/ 12 июня 2018

Я связал одну служебную программу с программным объектом.Первоначально оба имеют одинаковые идентификаторы подписи.Позже я добавил новый модуль в список модулей, которые в настоящее время существуют в сервисной программе.В этот момент и программа, и служебная программа имеют разные идентификаторы подписи.

Идентификатор подписи программы:

     Service                                                                
Opt  Program     Library     Activation  Signature                          
     SRVPGM1     AKSHAYM     *IMMED      00000000000000000000FE56D41B36D1   

Идентификатор подписи служебной программы:

   Shared activation group  . . . . . . . . . . . . :   *NO                     
   Current export signature . . . . . . . . . . . . :   0000000000D5D6C72E980395
EE694617                                                                        
   User profile . . . . . . . . . . . . . . . . . . :   *USER                   
                                                                        More... 

Теперь,когда я выпустил STRDBG и CALL для этой программы.Я не получаю ошибку нарушения подписи.

Я что-то здесь упускаю.Может кто-нибудь, пожалуйста, помогите мне в этом?

1 Ответ

0 голосов
/ 12 июня 2018

Нажмите несколько раз на выход команды DSPSRVPGM, чтобы перейти к экрану Подписи или просто используйте DSPSRVPGM SRVPGM(...) DETAIL(*SIGNATURE)

DSPSRVPGM - Signatures

Похоже, предыдущая подпись все еще в силе.

Это возможно благодаря использованию блока STRPGMEXP PGMLVL(*PRV) в источнике связывателя, используемом для создания объекта * SRVPGM.Идея состоит в том, что вы можете добавить новые экспорты в * SRVPGM без принудительной перекомпиляции существующих абонентов.

Однако использование PGMLVL(*PRV) на самом деле не добавляет никакой ценности.Просто добавляет сложность источнику связующего.

Рекомендуется использовать для ILE

  • Использовать жестко закодированную подпись, STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('MYSRV v1')
  • Добавить новые процедуры в конецсписок экспорта
  • не удаляет экспорт и не изменяет порядок списка экспорта источника связывателя
  • при внесении изменений в существующую процедуру, не изменяйте существующие параметры и добавляйте новые как OPTION(*NOPASS)

Следуя приведенным выше правилам, ваша сервисная программа может быть улучшена без необходимости повторной компиляции или иным образом затрагивающей любые существующие программы, которые вызывают в ней процедуры.Вы должны следовать последним 3 правилам выше даже с блоком PGMLVL(*PRV).Таким образом: проще и проще просто использовать жестко закодированные подписи.

Если в какой-то момент вам придется принудительно перекомпилировать вызывающих, то просто измените подпись * SRVPGM,
STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('MYSRV v2')

Ссылки: ILE Concepts для презентации RPG от IBM Барбары Моррис

Я рекомендую добавить комментарий в начале о добавлении нового экспорта в конце, а также добавить цифры в комментариидля каждого экспорта, чтобы подкрепить идею о том, что порядок не должен изменяться.

Вы устанавливаете подпись, используя параметр SIGNATURE команды STRPGMEXP

В идеале, подпись никогда не должна изменяться.

...