01.03.01.tiptop:快速开始篇(4fd+4gl+数据库:数据交互)

本页目录:

  • 1、编写程序
  • 2、测试

编写程序

  • 需求:4fd查询输入框输入信息,然后给到4gl获取数据,然后4gl查询数据库,查到的数据反回给4fd

4fd

  • 添加ButtonEdit按钮,属性修改如下:
物件(Object)-名称:oea904
表单字群(Formfield)-资料型态:VARCHAR
限制(Constraints)-noEntry:勾选
限制(Constraints)-notNull:勾选
限制(Constraints)-必要的:勾选
限制(Constraints)-验证:勾选
显示-图片:zoom
注解-注解:oea_file.oea904
杂项(Miscellaneous)-行动(Action):controlp
  • 代码:cxmq380.4fd
<?xml version="1.0" encoding="UTF-8" ?>
<ManagedForm gstVersion="22800" name="ManagedForm" uid="{a0a998a7-586e-40c7-a945-556afe07247f}">
  <AGSettings/>
  <Record additionalTables="" joinLeft="" joinOperator="" joinRight="" name="Undefined" order="" uid="{f7d1882a-c426-4abd-9aa0-16e2294dc3b3}" where="">
    <RecordField colName="" fieldIdRef="1" name="oea904" sqlTabName="" sqlType="VARCHAR" table_alias_name="" uid="{7b67776f-e187-43dd-804e-a61fc2d0d241}"/>
    <RecordField colName="" fieldIdRef="2" name="cnt" sqlTabName="" table_alias_name="" uid="{92852dad-3335-479e-8af4-6954a553c1fe}"/>
    <RecordField colName="" fieldIdRef="3" name="cn2" sqlTabName="" table_alias_name="" uid="{bbd73337-0489-4b87-b23f-ec237671c69e}"/>
  </Record>
  <Record additionalTables="" joinLeft="" joinOperator="" joinRight="" name="Record1" order="" uid="{23621e56-7e71-42f9-bb33-5809559846b5}" where=""/>
  <Record additionalTables="" joinLeft="" joinOperator="" joinRight="" name="Record2" order="" uid="{16ee7f58-47fc-4564-b685-b1eb425b2ad3}" where=""/>
  <Form gridHeight="20" gridWidth="159" name="apmq380" text="apmq380">
    <Grid gridHeight="17" gridWidth="153" name="Grid1" posX="2" posY="0">
      <Group gridHeight="7" gridWidth="148" name="Group1" posX="2" posY="1" text="Group1">
        <Label posX="1" posY="1" text="oea904"/>
        <ButtonEdit action="controlp" aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" case="none" colName="" columnCount="" comment="oea_file.oea904" fieldId="1" gridHeight="1" gridWidth="27" image="zoom" name="oea904" noEntry="true" notNull="true" posX="8" posY="1" required="true" rowCount="" sqlTabName="" sqlType="VARCHAR" stepX="" stepY="" tabIndex="1" table_alias_name="" title="ButtonEdit1" verify="true" widget="ButtonEdit"/>
      </Group>
      <Group gridHeight="3" gridWidth="148" name="Group2" posX="2" posY="8" text="Group2">
        <HLine gridWidth="10" name="hl1" posX="1" posY="1"/>
        <Label posX="12" posY="1" text="cnt"/>
        <Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="" columnCount="" fieldId="2" gridHeight="1" gridWidth="6" name="cnt" posX="17" posY="1" rowCount="" sqlTabName="" stepX="" stepY="" tabIndex="2" table_alias_name="" title="Edit1" widget="Edit"/>
        <HLine gridWidth="10" name="hl1607" posX="123" posY="1"/>
        <Label posX="135" posY="1" text="cn"/>
        <Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="" columnCount="" fieldId="3" gridHeight="1" gridWidth="6" justify="right" name="cn2" posX="140" posY="1" rowCount="" sqlTabName="" stepX="" stepY="" tabIndex="3" table_alias_name="" title="Edit1" widget="Edit"/>
      </Group>
    </Grid>
  </Form>
  <DiagramLayout>
    <![CDATA[AAAAAgAAAEwAewBmADcAZAAxADgAOAAyAGEALQBjADQAMgA2AC0ANABhAGIAZAAtADkAYQBhADAALQAxADYAZQAyADIAOQA0AGQAYwAzAGIAMwB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAEwAewA3AGIANgA3ADcANwA2AGYALQBlADEAOAA3AC0ANAAzAGQAZAAtADgAMAA0AGUALQBhADYAMQBmAGMAMgBkADAAZAAyADQAMQB9QCQAAAAAAABAQoAAAAAAAAAAAAAAAAAAAQAAAEwAewAxADYAZQBlADcAZgA1ADgALQA0ADcAZgBjAC0ANAA1ADYANAAtAGIANgA4ADUALQBiADEAZQBiADQAMgA1AGIAMgBhAGQAMwB9QDQAAAAAAABANAAAAAAAAAAAAAAAAAAAAQAAAEwAewA5ADIAOAA1ADIAZABhAGQALQAzADMAMwA1AC0ANAA3ADkAZQAtADgAYQBmADQALQA2ADkANQA0AGEANQA1ADMAYwAxAGYAZQB9QCQAAAAAAABATYAAAAAAAAAAAAAAAAAAAQAAAEwAewBiAGIAZAA3ADMAMwAzADcALQAwADQAOAA5AC0ANABiADgANwAtAGIAMgAzAGYALQBlAGMAMgAzADcANgA3ADEAYwA2ADkAZQB9QCQAAAAAAABAVEAAAAAAAAAAAAAAAAAAAQAAAEwAewAyADMANgAyADEAZQA1ADYALQA3AGUANwAxAC0ANAAyAGYAOQAtAGIAYgAzADMALQA1ADgAMAA5ADUANQA5ADgANAA2AGIANQB9QCQAAAAAAABAJAAAAAAAAAAAAAAAAAAAAQ==]]>
  </DiagramLayout>
</ManagedForm>

4gl

  • 在q_per添加开窗查询:q_oea904 。参考:03.01.03.组件篇(4fd+4gl 新增:查询+输入框 界面化方式)

  • 代码:cxmq380.4gl

# Prog. Version..: '5.00.03-2023.11.16(00000)'
# Pattern name...: cxmq380.4gl
# Descriptions...: 多角订单出货未交明细查询
# Author..: DKLi
# Date: 2023.11.17
DATABASE ds
GLOBALS "../../config/top.global"

# 4gl变量
DEFINE g_curs_index          LIKE type_file.num10
DEFINE g_row_count           LIKE type_file.num10
DEFINE g_cn2                 LIKE type_file.num10
DEFINE g_rows     RECORD
                     oea01   LIKE oea_file.oea01,
                     oea904  LIKE oea_file.oea904,
                     poz011  LIKE poz_file.poz011,
                     oea02   LIKE oea_file.oea02,
                     oea03   LIKE oea_file.oea03,
                     oeb03   LIKE oeb_file.oeb03,
                     oeb04   LIKE oeb_file.oeb04,
                     oeb06   LIKE oeb_file.oeb06,
                     ima021  LIKE ima_file.ima021,
                     oeb05   LIKE oeb_file.oeb05,
                     oeb12   LIKE oeb_file.oeb12
                  END RECORD

# 4fd的变量
DEFINE tm       RECORD
                    wc   string
                END RECORD

# Pattern name...: MAIN
# Descriptions...: 主函数
MAIN
  # 定義局域變量,本文函數可以用
  DEFINE p_row,p_col     LIKE type_file.num5

  LET p_row     = ARG_VAL(1)
  LET p_col     = ARG_VAL(2)
  LET tm.wc   = ARG_VAL(3)

  # 改變一些系統缺省值
  OPTIONS
      FORM LINE     FIRST + 2,               #畫面開始的位置
      MESSAGE LINE  LAST,                    #訊息顯示的位置
      PROMPT LINE   LAST,                    #提示訊息的位置
      INPUT NO WRAP                          #輸入的方式: 不打轉
  DEFER INTERRUPT                            #擷取中斷鍵

  # cl_user( ) 主要在抓取系統中與『個人設定』
  IF (NOT cl_user()) THEN
    EXIT PROGRAM
  END IF

  # 當發生 SQL 錯誤時,系統會CALL cl_err_msg_log( )
  WHENEVER ERROR CALL cl_err_msg_log

  # cl_setup( ) 主要在抓取系統中與『模組設定』相關的變數值資料,
  # 如這個模組所必需的全域變數等等
  IF (NOT cl_setup("CXM")) THEN
    EXIT PROGRAM
  END IF

  CALL  cl_used(g_prog,g_time,1) RETURNING g_time   -- 計算使用時間 (進入時間)

  # 打開窗口
  LET p_row = 5 LET p_col = 10  -- 給變量賦值
  OPEN WINDOW q380_w AT p_row,p_col WITH FORM "cxm/42f/cxmq380"
    ATTRIBUTE (STYLE = g_win_style CLIPPED)
    CALL cl_ui_init()     -- 初始化程序設定 
    CALL q380_menu()  -- 調用q380_menu函數
  CLOSE WINDOW q380_w

  CALL  cl_used(g_prog,g_time,2) RETURNING g_time    -- 計算使用時間 (退出時間)

END MAIN

# Pattern name...: q380_menu()
# Descriptions...:画面的ToolBar的设置函数
FUNCTION q380_menu()
    # ToolBar的設置
    MENU ""
        BEFORE MENU
          CALL cl_navigator_setting(g_curs_index, g_row_count)  -- 重新設定TOOLBAR上的『上筆、跳筆、下筆』等五個按鍵是否可用 / 不可用。
        ON ACTION query -- 查询按钮
         CALL q380_s()
        ON IDLE g_idle_seconds 
          CALL cl_on_idle() 
          CONTINUE MENU
        ON ACTION locale --语言按钮
          CALL cl_dynamic_locale() #切换
          CALL cl_show_fld_cont() #显示
        ON ACTION help --帮助/说明按钮
          CALL cl_show_help()
        ON ACTION about --程式咨询按钮
          CALL cl_about()
        ON ACTION controlg --程式切换
          CALL cl_cmdask() 
        ON ACTION exit   -- 離開按鈕
          LET INT_FLAG = FALSE
          EXIT MENU
        ON ACTION close -- 窗口右上角x按钮
          LET INT_FLAG=FALSE
          EXIT MENU
    END MENU
END FUNCTION

# Pattern name...: q380_q()
# Descriptions...: 获取4fd传来的数据
FUNCTION q380_s()

   INITIALIZE tm.wc TO NULL
   CALL q380_set_entry("q")

   CONSTRUCT BY NAME tm.wc ON oea904
      BEFORE CONSTRUCT
         CALL cl_qbe_init()
      ON ACTION CONTROLP
         CASE
            WHEN INFIELD(oea904)
               CALL cl_init_qry_var()
               LET g_qryparam.state = 'c'
                  LET g_qryparam.form = "q_oea904"
               CALL cl_create_qry() RETURNING g_qryparam.multiret
               DISPLAY g_qryparam.multiret TO oea904
               NEXT FIELD oea904
         OTHERWISE EXIT CASE
         END CASE
      ON ACTION locale
         CALL cl_dynamic_locale()
         CALL cl_show_fld_cont()
         EXIT CONSTRUCT
      ON IDLE g_idle_seconds
         CALL cl_on_idle()
         CONTINUE CONSTRUCT
      ON ACTION about
         CALL cl_about()
      ON ACTION controlg
         CALL cl_cmdask()
      ON ACTION help
         CALL cl_show_help()
   END CONSTRUCT

   CALL q380_q()

END FUNCTION


# Pattern name...: q380_set_entry(p_cmd)
# Descriptions...: 设置输入框可以编辑
FUNCTION q380_set_entry(p_cmd)
   DEFINE p_cmd LIKE type_file.chr1
   IF p_cmd = 'q' THEN
        CALL cl_set_comp_entry("oea904",TRUE)
   END IF
END FUNCTION

# Pattern name...: q380_q()
# Descriptions...: 根据4fd输入的信息,查询后台数据
FUNCTION q380_q()
   DEFINE l_sql                 string
   
   INITIALIZE g_rows.* TO NULL
   LET l_sql ="SELECT oea01,oea904,poz011,oea02,oea03,oeb03, ",
              "       oeb04,oeb06,ima021,oeb05,oeb12 ",
              "FROM OEA_FILE ",
              "INNER JOIN OEB_FILE ON oeb01=oea01 ",
              "INNER JOIN IMA_FILE ON ima01=oeb04 ",
              "INNER JOIN POZ_FILE ON poz01=oea904 ",
              "WHERE ",tm.wc CLIPPED,
              "  AND OEACONF = 'Y' ",
              "  AND oea11 IN ('6','7') ",
              "GROUP BY oea01,oea904,poz011,oea02,oea03,oeb03, ",
              "         oeb04,oeb06,ima021,oeb05,oeb12 ",
              "ORDER BY oea01,oeb03 "

   PREPARE q380_prepare FROM l_sql
   # DECLARE q380_cs SCROLL CURSOR FOR SELECT * FROM OEA_FILE .....
   DECLARE q380_cs SCROLL CURSOR FOR q380_prepare
   LET g_cn2 = 0
   FOREACH q380_cs INTO g_rows.*
      IF cl_null (g_rows.oea01)  THEN
         CONTINUE FOREACH
      END IF
      LET g_cn2 = g_cn2 + 1
   END FOREACH

   call q380_show()

END FUNCTION


# Pattern name...: q380_show()
# Descriptions...: 將數據顯示到畫面
FUNCTION q380_show()
  DISPLAY g_cn2 TO FORMONLY.cn2
END FUNCTION

测试

# 使用sftp 上传
cd /u1/toptest/topcust/cxm/4fd
put cxmq380.4fd
cd /u1/toptest/topcust/cxm/4gl
put cxmq380.4gl

# 使用ssh 编译
cd /u1/toptest/topcust/cxm/4fd
r.f2 cxmq380 2 c
cd /u1/toptest/topcust/cxm/4gl
r.c2 cxmq380
r.l2 cxmq380
exe2 cxmq380

  • 输入的内容是:PSWBLV2
-- 找最小笔数的oea904做测试
SELECT oea904,COUNT(oea904)
FROM OEA_FILE
INNER JOIN OEB_FILE ON oeb01=oea01
INNER JOIN IMA_FILE ON ima01=oeb04
INNER JOIN POZ_FILE ON poz01=oea904
WHERE OEACONF = 'Y'
  AND oea11 IN ('6','7')
GROUP BY oea904
ORDER BY COUNT(oea904)

在这里插入图片描述

  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 鼎捷Tiptop ERP是一款由鼎捷软件开发的企业资源计划(ERP)系统。它为企业提供了一站式解决方案,可以帮助企业管理各种业务流程、提高管理效率、优化资源配置、降低运营成本、提高竞争力。 鼎捷Tiptop ERP支持模块化构建,包括采购管理、销售管理、财务管理、人力资源管理、生产管理、库存管理等主要业务模块,以及强大的业务分析、报表功能,提供了全面的企业管理解决方案。此外,为了满足不同企业的需求,鼎捷Tiptop ERP提供了可定制化的服务,使得企业可以根据自身业务特点进行个性化配置和功能扩展。 鼎捷Tiptop ERP在实施过程中重视用户参与,提供全面的培训和技术支持,确保企业能够高效地使用系统,提升企业管理水平和效率。目前,该系统已被广泛应用于制造业、零售业、医疗等多个行业,为企业提供了可靠的信息化支持。 总之,鼎捷Tiptop ERP是一款全面的企业管理解决方案,适用于各类企业管理需求,具有可定制化、易操作、易扩展等特点,是企业信息化建设的重要选择。 ### 回答2: 鼎捷Tiptop ERP是一款完整的企业资源规划软件解决方案。该软件可以帮助企业实现全面的IT赋能和数字化转型,提升企业管理效率和竞争力。该软件拥有多个模块,可以满足各种企业不同的需求,包括财务管理、供应链管理、生产制造、客户关系管理、人力资源管理等。此外,鼎捷Tiptop ERP还拥有丰富的BI(Business Intelligence)报表和分析功能,能够帮助企业实时掌握业务运营情况和趋势,帮助企业制定更加科学的决策。 鼎捷Tiptop ERP不仅可以在企业内部部署,还可以提供云端服务,帮助企业进行SAAS(Software as a Service)模式部署,减少IT总体成本和风险。此外,该软件也可以与第三方系统进行接口联动和数据交换,实现IT资源共享和互通。 总的来说,鼎捷Tiptop ERP是一款功能全面、操作简便、灵活可定制、性价比高的企业管理软件解决方案,适合各种规模和行业的企业使用,旨在助力企业实现数字化转型和可持续发展。 ### 回答3: 鼎捷Tiptop ERP是一款全面的企业资源规划软件,在企业管理中发挥着重要的作用。该软件的设计旨在将所有企业数据集成在一个平台上,包括订单管理、库存管理、采购管理、销售管理、财务会计等等。借助鼎捷Tiptop ERP,企业可以全面展示其整个生产和供应链及各部分的运作,帮助企业管理者做出更为精准的决策,实现更高效的生产和运营管理。 此外,鼎捷Tiptop ERP还具备高度的可扩展性和灵活性,可以灵活地根据不同的企业需求进行定制和升级,以适应企业的发展和变化。 鼎捷Tiptop ERP的主要特点包括强大的数据及分析功能,基于角色的安全体系,支持多语言、多货币和多地区的功能,以及高度的流程自动化和实时监控。这些功能和特点可以帮助企业高效地管理其操作和数据,提高生产效率、降低成本、增强业务合规性、提升客户满意度和市场竞争力。 总之,作为一款稳定、强大且多功能齐备的企业管理软件,鼎捷Tiptop ERP可以帮助企业在竞争激烈的市场环境下更好地实现企业管理的升级和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DKLi1717

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值