데이터 베이스 MySQL 튜토리얼 在EBSForm查找界面点"Find"之后都发生了什么?

在EBSForm查找界面点"Find"之后都发生了什么?

Jun 07, 2016 pm 03:56 PM
amp find quot 찾다

我一直对form 都感觉比较困惑, 特别是form 里面的trigger, 像PRE-QUERY, POST-QUERY 一直都弄不清情况. 这个trigger 是什么时候触发的呢? 看名字就是在QUERY 之前或之后触发的. 那么QUERY 什么呢? 搞不清楚. 今天就看下代码, 弄明白点了 find 之后做了什么事

我一直对form 都感觉比较困惑, 特别是form 里面的trigger, 像PRE-QUERY, POST-QUERY 一直都弄不清情况. 这个trigger 是什么时候触发的呢? 看名字就是在QUERY 之前或之后触发的. 那么QUERY 什么呢? 搞不清楚.

今天就看下代码, 弄明白点了 "find" 之后做了什么事情, 那些数据库里面的值怎么到form 界面上去的.

我们知道, 每一个form 上的数据块都是绑定一个table 或者 view 的. 通常会绑定view. 像下面那样:

vcu1REVNX09SREVSX1YsIMi7uvOw0XZpZXcgwO/D5rXE19a2ztK70ru21NOm09rK/b7dv+m1xNfWts4sINXi0fmx4NLr1MvQ0LXEyrG68iwg1Npmb3JtIL3nw+ayy7Wlyc8gdmlldyAtJmd0OyBxdWVyeSBieSAtJmd0OyBydW4sIL7Nv8nS1NaxvdPX9rLp0a+1xLav1/csINTaZm9ybSC958Pmyc++zbvhz9TKvrP2yv2+3b/itcS8x8K8LjwvcD4KPHA+ICAgICDV4sDvvs3X9sHL0ru0zlFVRVJZILXEtq/X9ywgsunRr8r9vt2/4iwgyLu687DRvMfCvLXEJiMyMDU0MDvM7rW9ttTTprXEZmllbGQgwO/D5silLjwvcD4KPHA+ICAgICC1q8rH1eLR+bXEwt+8rcrHvPK1pbXELCDDu9PQsOy3qNOmuLZFQlMguLTU07XE0rXO8cLfvK0uINLytMvU2sq1vMq1xNf2t6jW0CwgsqLDu9PQ08PV4tH5vPK1pdaxvdO1xLe9yr0uIM7Sw8fIpb+0RUJTIMDvw+a1xGZvcm0sIMr9vt2/4snPtcTX1rbOus12aWV3IMDvw+a1xNfWts68uLr1w7vT0LbU06a52M+1LiAmIzIwMjg0O7r1ysfBvbj2srvP4LnYway1xLarzvcsINa7ysfD+9fWutzP8S48L3A+CjxwPiAgICAg1eLR+df2tcS94bn7vs3Kx7y4uvXL+dPQtcTQ0M6qtrzSqtfUvLrQtLT6wuvKtc/WLiCyu8Tcz/HJz8PmxMfR+bXjz8Ky6dGvLCDIu7rzy/nT0LXEJiMyMDU0MDvX1Lavz9TKvtTavefD5snPwcsuINPJ09rIscnZyv2+3b/i0+u958Pm19a2zrXEudjBqiwgvLTKubLp0a/By8r9vt2/4iwg0rLSqsrWtq+w0SYjMjA1NDA7uLTWxrj4vefD5snPtcTX1rbOLjwvcD4KPHA+ICAgICDO0sPH0tRQTyBSZWNlaXB0cyC958PmzqrA/Swgv7S/tLXjz8ImcXVvdDtmaW5kJnF1b3Q7ILa81/bBy8TE0KnKwsfpLjwvcD4KPHA+MS4gytfPyM6qwcu88ruvzsrM4iwgztLDx9XiwO/Wu7+8wsdSQ1ZSQ0VSQy5mbWIg1eK49mZvcm0g1rvT0MG9uPbK/b7dv+kgYSkgRmluZCAgIGIpUkNWX1RSQU5TQUNUSU9OPC9wPgo8cD7U2kZpbmQgvefD5snPzO7QtLrDsunRr8z1vP668ywgtePSu8/CJnF1b3Q7ZmluZCZxdW90Oywg1eLKsbvhs/a3oldIRU4tQlVUVE9OLVBSRVNTRUQg1eK49nRyaWdnZXIuINTa1eK49nRyaWdnZXIgwO/D5s/ItffTw0FQUF9TVEFOREFSRC5BUFBfVkFMSURBVEUgKFJFQ09SRF9TQ09QRSkg1/bR6dakLCDIu7rztffTw8HLRklORF9CVVRUT05fQ09ERSDV4rj2t723qC4gPC9wPgo8cD7U2tXiuPa3vbeowO/D5iwgtffTw8HLUkNWX0ZJTkRfQy5GSU5EX0JVVFRPTig="WHEN-BUTTON-PRESSED','FIND','RCV_TRANSACTION') 这个过程.

这时在RCVCOFND.pld 里面定义的一个过程. 这个文件是一个比较底层的文件, Receipts form 从这个from 上继承了很多, 也调用里面的方法.

这个方法里面有3 个参数, 第一个是trigger 名. 第二个是find block name, 第三个是navigation block name. 那么调用这个过程会去到RCV_TRANSACTION 这个数据块, 然后做查询, 用下面的代码来实现:

go_block(navigation block name);

do_key('EXECUTE_QUERY');

2. 那么这时焦点就会跑到RCV_TRANSACTION 这个块上去, 然后做查询. 查询什么呢? 就是查询这个数据块所绑定的view.

在做查询之前, 我们要在RCV_TRANSACTION 这个数据块下面找到了PRE-QUERY 和 POST-QUERY 这两个trigger. 这两个是干嘛的呢? 就是在做QUERY 之前给查询做一些准备工作, 和查询结束之后进行一些后续工作. PRE-QUERY 只在查询之前执行一次, 但是POST-QUERY 要在查询之后触发多次. 查询到多少条记录就出发多少次.

3. 现在来看PRE-QUERY 里面做了什么.

先是调用了这个过程: analyze_search_criteria(l_rcv_view, l_dest_query_pos, l_src_type); 看名字能看出来是在做什么... 分析查询条件. 这3 个参数属性都是OUT. 在这个过程里面确定了查询使用的view: l_rcv_view 是那个. 比如说, 如果我们做的是一个组织间转移 inter org transfer, 那么使用的view 就是RCV_ENTER_RECEIPTS_INTERNAL_V; 如果是ASN 接收的话, 使用的view 是RCV_ENTER_RECEIPTS_ASN_V; 使用哪个view 做查询就是在这个过程里面决定的. 决定标准是根据"Find" form 界面上填入的查询条件. l_dest_query_pos 意思是使用的查询方式, 有"from" 和 "where" 两种取值可能. l_src_type 就是source type, 可能是INTERNAL, LCM, CUSTOMER, VENDOR, ALL 等等;

我们这里考虑l_dest_query_pos = where 的情况.

这里面会用下面这个过程APP_QUERY.append(block_name, clause) 把 clause 加到前面block_name 后面, 作为查询条件.

4. 就这样通过判断find form 里面填入的值, 给查询的数据块加入一个一个条件. 比如, 如果FIND.SOURCE_TYPE 的值是VENDOR, 加上的查询条件就是: (RCV_ENTER_RECEIPTS_V.SOURCE_TYPE_CODE = ''VENDOR'' OR RCV_ENTER_RECEIPTS_V.SOURCE_TYPE_CODE = ''ASN''). 诸如此类.

5. PRE-QUERY 还做了一件事, 就是把find 界面上的值copy 给RCV_TRANSACTION 对应的字段. 但是这些不是作为查询条件来的.

6. 就这样在PRE-QUERY 里面确定了查询使用哪个view, 并且确定了查询条件. 然后就是做查询的动作. 查询是从前面的RCV_ENTER_RECEIPTS_INTERNAL_V 和RCV_TRANSACTION 绑定的view RCV_ENTER_RECEIPTS_V 两个view 里面查出结果来. 当查询结束后, 就会执行POST-QUERY 这个trigger.

7. 之前我们说过, 由于RCV_TRANSACTION 这个数据块上的字段和view 里面的字段是没有绑定关系的, 因此查询出来的结果并不会自动赋值给界面上的字段. 需要在POST-QUERY 里面手动赋值. 所以这个trigger 主要就是做的赋值的工作. 这个里面有大量的代码, 格式很单一:

if (criteria ) then select a into b from table where .. copy (b , 'RCV_TRANSACTION.field');

也就是根据某个条件从数据库查出某个值, 赋值给数据库的字段. 所以这个里面出现了大量select 语句和copy 语句.

8. 在POST-QUERY 里面也调用了非常多的数据库过程, 这些过程写在 pls 文件中. 这里没有去深究这许多过程有哪些功能, 但能从调用的结果上看出来, 这里面是做了一些逻辑判断和计算的. 例如v_secondary_quantity := inv_convert.inv_um_convert

9. 另外在这个trigger 的最后会set 字段的属性, 例如set_item_property: item_is_valid, 就是让字段验证属性为真.

10. 到这里为止, query 的动作就做完了, 通过PRE-QUERY 设定查询条件, POST-QUERY 给界面字段赋值. 要注意的是, 如果查询出来有两条记录的话, 那么POST-QUERY 会执行两次. 为啥要执行两次呢? 因为界面上两条记录的字段是不一样的, 需要根据不同的条件赋值, 比如两条记录的id 不一样, 就要用这个id 分别查出某个字段的值在赋值.

11. 到这里为止, 上面的RCV_FIND_C.FIND_BUTTON('WHEN-BUTTON-PRESSED','FIND','RCV_TRANSACTION') 这个过程就执行完了. 在此之后又执行了一下过程, 但是已经更查询的关系不大了, 主要是跳到某个窗口, 设置属性等等. 至此, WHEN-BUTTON-PRESSED 这个trigger 就全部执行完毕了. 查询的结果就已经在界面上显示出来了.

12. 在焦点跳入RCV_TRANSACTION 数据块的时候, 又会出发WHEN-NEW-RECORD-INSTANCE 等等trigger, 但这是后事了, 这里就不讨论了;

总结: 这样的做法显得非常复杂而且需要写很多代码, 但是优点也是比较明显的, 这对于所有的字段都有比较精确的控制. 这对于实现复杂的业务逻辑是必须的.

代码中有许多built-in 的代码, 可以在form builder 里面找看看是怎么用的. 帮助很大.

注: 这是我看着代码写出来的, 如果里面有错误的地方, 希望大家能够指出来, 共同进步.

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C#에서 Array.IndexOf 함수를 사용하여 배열에 있는 요소의 인덱스를 찾습니다. C#에서 Array.IndexOf 함수를 사용하여 배열에 있는 요소의 인덱스를 찾습니다. Nov 18, 2023 am 09:59 AM

C#에서 Array.IndexOf 함수를 사용하여 배열에 있는 요소의 인덱스를 찾습니다. C# 프로그램에서 배열에 있는 요소의 인덱스를 찾아야 하는 경우 Array.IndexOf 함수를 사용할 수 있습니다. Array.IndexOf 함수는 지정된 배열 범위 내에서 지정된 요소를 찾고 해당 요소가 처음 나타나는 인덱스를 반환합니다. 요소를 찾을 수 없으면 -1이 반환됩니다. 다음은 Array.IndexOf 함수를 사용하여 배열에서 요소를 찾는 방법을 보여 주는 샘플 코드입니다.

나의 iPhone 찾기를 끄는 방법 나의 iPhone 찾기를 끄는 방법 Nov 09, 2023 pm 02:21 PM

iPhone에서 나의 찾기를 끄면 어떻게 되나요? 나의 iPhone 찾기는 분실했거나 도난당한 기기를 찾는 데 도움이 됩니다. 나의 iPhone 찾기를 활성화하면 지도에서 기기의 위치를 ​​추적하고, 소리를 재생하고, 기기를 찾는 데 도움을 줄 수 있습니다. 나의 찾기에는 다른 사람이 귀하의 iPhone을 사용하는 것을 방지하는 활성화 잠금 기능도 포함되어 있습니다. 나의 iPhone 찾기를 끄면 이러한 모든 기능이 손실되어 분실된 Apple 기기를 복구하기 어려울 수 있습니다. 나의 iPhone 찾기는 매우 유용하지만 휴대폰을 판매, 기부, 교환하거나 배터리 교체 또는 기타 서비스를 위해 보낼 때는 비활성화해야 합니다. 이렇게 하면 누구도 귀하에 관한 정보에 접근할 수 없습니다.

하드디스크 일련번호와 MAC 주소를 확인하는 방법 하드디스크 일련번호와 MAC 주소를 확인하는 방법 Feb 18, 2024 pm 07:45 PM

하드 드라이브 일련 번호와 MAC 주소는 컴퓨터 하드웨어의 중요한 식별자이며 컴퓨터 시스템을 관리하고 유지하는 데 매우 유용합니다. 이 문서에서는 하드 디스크 일련 번호와 MAC 주소를 찾는 방법을 소개합니다. 1. 하드 드라이브 일련 번호를 찾으십시오. 하드 드라이브 일련 번호는 하드 드라이브 제조업체가 하드 드라이브를 식별하고 추적하는 데 사용하는 고유 식별자입니다. 운영 체제에 따라 하드 드라이브 일련 번호를 찾는 방법이 약간 다릅니다. Windows: 명령 프롬프트를 열고(시작 메뉴에서 "cmd" 검색) 다음 명령을 입력하고 Enter를 누릅니다. wmicdisk

iPhone에서 나의 찾기를 끄는 4가지 방법 iPhone에서 나의 찾기를 끄는 4가지 방법 Feb 02, 2024 pm 04:15 PM

Apple의 나의 찾기 앱을 사용하면 iPhone이나 기타 기기의 위치를 ​​찾아 분실하거나 잊어버리는 일을 방지할 수 있습니다. 나의 찾기는 장치를 추적하는 데 유용한 도구이지만 개인 정보 보호 문제가 우려되거나 배터리 소모를 원하지 않는 경우 또는 기타 이유로 비활성화할 수 있습니다. 다행히도 iPhone에서 나의 찾기를 끄는 방법에는 여러 가지가 있으며, 이 기사에서는 이에 대해 모두 설명하겠습니다. iPhone에서 나의 찾기를 끄는 방법 [4가지 방법] 네 가지 방법으로 iPhone에서 나의 찾기를 끌 수 있습니다. 방법 1을 사용하여 찾기를 끈 경우 비활성화하려는 장치에서 이 작업을 수행할 수 있습니다. 방법 2, 3, 4를 진행하려면 Find Finder를 끄려는 iPhone의 전원을 끄거나

PHP의 glob() 함수는 파일이나 디렉토리를 찾는 데 사용됩니다. PHP의 glob() 함수는 파일이나 디렉토리를 찾는 데 사용됩니다. Nov 18, 2023 pm 06:17 PM

PHP의 glob() 함수는 파일이나 디렉터리를 찾는 데 사용되며 강력한 파일 작업 함수입니다. 지정된 패턴 일치를 기반으로 파일 또는 디렉터리의 경로를 반환할 수 있습니다. glob() 함수의 구문은 다음과 같습니다. glob(pattern, flags) 여기서 패턴은 일치할 패턴 문자열을 나타내며 *.txt(.txt로 끝나는 일치 파일)와 같은 와일드카드 표현식일 수 있습니다. 특정 파일 경로. 플래그는 함수를 제어하는 ​​데 사용되는 선택적 매개변수입니다.

컴퓨터 하드 드라이브의 일련 번호를 찾는 방법 컴퓨터 하드 드라이브의 일련 번호를 찾는 방법 Feb 20, 2024 am 10:33 AM

컴퓨터 하드 드라이브의 일련번호를 확인하는 방법 컴퓨터 기술의 발달로 컴퓨터 하드 드라이브는 우리 삶에 없어서는 안 될 부분이 되었습니다. 중요한 파일을 저장하거나 운영 체제 및 소프트웨어를 설치하는 등의 작업을 완료하려면 하드 디스크에 의존해야 합니다. 하드 드라이브의 일련 번호와 같은 컴퓨터 하드 드라이브에 대한 몇 가지 기본 정보를 이해하면 컴퓨터 시스템을 더 잘 관리하고 유지하는 데 도움이 될 수 있습니다. 그렇다면 컴퓨터 하드디스크의 일련번호를 확인하는 방법은 무엇일까요? 이 기사에서는 몇 가지 일반적인 방법을 소개합니다. 방법 1: Windows 시스템과 함께 제공되는 명령줄 도구 사용 Windows 시스템

OPPO Find X7은 걸작입니다! 이미지로 모든 순간을 포착하세요 OPPO Find X7은 걸작입니다! 이미지로 모든 순간을 포착하세요 Aug 07, 2024 pm 07:19 PM

빠르게 변화하는 시대에 OPPO Find X7은 이미징 능력을 활용하여 우리가 인생의 모든 아름다운 순간을 즐길 수 있도록 해줍니다. 웅장한 산, 강, 호수, 바다, 따뜻한 가족 모임, 거리에서의 만남과 놀라움 등 무엇이든 "비할 데 없는" 화질로 기록하는 데 도움이 될 수 있습니다. 외관상 파인드잇의 카메라 데코 디자인은 인지도가 매우 높으며 고급스러운 느낌을 줍니다. 기본적인 하드웨어 구성부터 시작해 내부도 독특하다. FindX7은 이전을 유지합니다

Python에서 해시 조회 알고리즘을 작성하는 방법은 무엇입니까? Python에서 해시 조회 알고리즘을 작성하는 방법은 무엇입니까? Sep 21, 2023 pm 02:37 PM

Python에서 해시 조회 알고리즘을 작성하는 방법은 무엇입니까? 해시 검색 알고리즘이라고도 알려진 해시 검색 알고리즘은 해시 테이블을 기반으로 한 데이터 검색 방법입니다. 선형 검색 및 이진 검색과 같은 기존 검색 알고리즘과 비교하여 해시 검색 알고리즘은 검색 효율성이 더 높습니다. Python에서는 사전을 사용하여 해시 테이블을 구현한 다음 해시 조회를 구현할 수 있습니다. 해시 검색 알고리즘의 기본 개념은 검색하려는 키워드를 해시 함수를 통해 인덱스 값으로 변환한 후, 인덱스 값을 기준으로 해시 테이블에서 검색하는 것이다.

See all articles