I wrote a JAVASDK for Kingdee Cloud
AD |
backgroundShortly after joining, I was responsible for a financial module of the company, which mainly required monthly financial statements and then reconciliation. For small companies, financial personnel can generally complete most tasks through data collection and perspective analysis using Excel
background
Shortly after joining, I was responsible for a financial module of the company, which mainly required monthly financial statements and then reconciliation. For small companies, financial personnel can generally complete most tasks through data collection and perspective analysis using Excel. But my company is considered a medium-sized one and has introduced many systems. The sales management end includes ERP, OMS, WMS, etc., while the finance end mainly uses Kingdee system. To be more precise, I am currently using the SaaS version of Kingdee Cloud. So in order to assist finance in faster reconciliation, the IT department needs to collect and integrate data from various business systems into a database, and then perform reports or BI presentations

Kingdee Cloud SaaS System

ERP system
Just now, my former colleague made a small system that has such a function, so I went to see if I could reuse it directly, and then went to look at the source code, which is all hard coding. Although it can meet the current functionality, once a new feature is added, a large amount of duplicate code needs to be copied and pieced together, and modifying a feature requires modifying multiple places at the same time. Only one of the business methods is shown below.

hardcdoe01

hardcode02
At this moment, I am thinking about whether I can write a universal SDK for docking with Kingdee, shielding all details of Kingdee operations, and only providing corresponding login authentication (only requiring the client to provide the corresponding account password), query, save, update, delete, and other interfaces. However, based on years of development experience, I believe that Kingdee will definitely provide such an SDK, so I went to the official search and couldn't find it after searching for a long time (it is said that it already exists). After all, I maintain the system and code on my own, so I can't let myself become so numb, so I still need to do something interesting to make the work not too boring. Therefore, I spent some time manually writing a Kingdee SDK while balancing my daily work. Currently, I have hung it on Gitee, and I feel that the effect is quite good. Interested students can take a look. The following figure shows the statistics of the code base.

kingdee-k3cloud-webapi
Below, I can briefly analyze the structure of the code for everyone.
Kingdee k3coud web API parsing
Firstly, several pain points need to be addressed
- The client should no longer care about login authentication issues, just provide the account password
- Out-of-the-box interface with minimal range of interface parameters
- Object oriented programming rather than exposing a large number of properties or methods originating from an object to various parts of the code
- SDK has high scalability
Before addressing the pain points mentioned above, we need to consider from an abstract perspective what kind of role the Kingdee system belongs to relative to our current platform. Actually, it can be likened to a database, where I need to use my username and password to operate it (query, add, delete, update). So before writing the specific implementation, I first made a top-level decision

ApiService
Actually, after reading this interface and each method, it's clear what to do next. Let me briefly analyze:
GetEndPoint: The service address provided by the client
GetService: What service, add or query
GetAuth: authentication function
Execute: Execute requests and process data

CommonService01

CommonService02
In that case, we will solve the problemPain point 1The login issue is equivalent to built-in login, and the client does not need to worry. And it also solved the problemPain point 4There is an extension issue with the SDK. If Kingdee adds new service functions in the future, I just need to inherit the Common Service class.

Each implementation class
Next is how to make it more convenient for the client to operate. At this moment, I am thinking of various template operations in Spring, such as JdbcTemplate, RedisTemplate, and so on. Thinking about their ideas, it feels very intuitive and convenient. So I created a K3CloudTemplate, and you can take a look at the following implementation:

K3CloudTemplate
This will solve the problemPain point 2We can use it out of the box and minimize the parameter range (such as BillQuery and BillSave, where we can view Kingdee's forms as individual objects and extract commonalities instead of passing a large number of parameters). So let's take a look at how forms are abstractly encapsulated.
Firstly, I roughly looked at the request document of Kingdee and found that different interface requests require passing common parameters, such as formId. Therefore, the form should also have a top-level parent class to facilitate shared properties or behaviors. Then there is the top-level entity BillEntity.

BillEntity
The next step is to extend according to different form types, as follows:

BillQuery

BillSave
It can be seen that BillQuery is significantly different from BillSave. BillQuery is a bit more complex because the query responds to more business scenarios, such as which fields need to be queried, what conditions are, and how many rows are returned. These are all encapsulated in the BillQuery object. If you use a process oriented and heap code mindset to write this query, you may encounter the situation at the beginning of the article where you need to concatenate query fields, conditions, etc. according to Kingdee's API, rather than treating it as a query object and blocking some common actions. This explains whyPain point 3The problem of object attribute decentralization
summary
summary
- Technology ultimately serves the business. Before starting, measure the business boundaries of all parties in order to abstract and make trade-offs
- Being able to use object-oriented programming means never having to be process oriented and not overly encapsulated
- Drawing on classic open-source framework ideas and best practices
- Not reproducing wheels
- Independent thinking ability, not numb or particular
Thank you for reading. It's not easy to code. Could you please share it or give a thumbs up and attention
Disclaimer: The content of this article is sourced from the internet. The copyright of the text, images, and other materials belongs to the original author. The platform reprints the materials for the purpose of conveying more information. The content of the article is for reference and learning only, and should not be used for commercial purposes. If it infringes on your legitimate rights and interests, please contact us promptly and we will handle it as soon as possible! We respect copyright and are committed to protecting it. Thank you for sharing.(Email:[email protected])
Mobile advertising space rental |
Tag: wrote JAVASDK for Kingdee Cloud
Is the world ready to receive ChatGPT therapists?
NextStarting from a video business, the founder has left abroad and has not returned yet. Who still misses LeEco?
Guess you like
-
Huawei's HarmonyOS Native Ecosystem: Thriving and Shaping the Future of Smart LivingDetail
2025-03-03 18:25:28 1
-
Unitree Robotics Founder Wang Xingxing Releases Video Statement: Warning Against Online Misinformation, Protecting Shareholder InterestsDetail
2025-03-02 12:40:18 11
-
The Age of Smart Homes Arrives: Habitat L32 Ushers in an Upgrade to Living ExperienceDetail
2025-02-28 21:16:59 1
-
Alibaba's DAMO Academy Announces Imminent Delivery of XuanTie C930 Processor, Achieving 15/GHz in SPECint2006 BenchmarkDetail
2025-02-28 11:06:08 1
-
China's OTA Platforms: A High-Efficiency Miracle Under Low Commission RatesDetail
2025-02-28 10:38:34 21
-
China Leads in Setting International Standard for Elderly Care Robots, Ushering in a New Era for the Global Silver EconomyDetail
2025-02-28 10:37:23 1
-
Xiaomi SU7 Ultra: The World's Strongest Four-Door Production Car, 10,000 Pre-orders in Two Hours, Price Drop Ignites the Market!Detail
2025-02-28 10:29:25 1
-
Kingdee Qatar Company Established: Empowering Middle Eastern Enterprises' Digital Transformation with Digital Technology, Driving the "National Vision 2030"Detail
2025-02-28 09:56:02 1
- Detail
-
DeepSeek API Price Adjustment: Off-Peak Discounts Reduce Costs, Up to 75% OffDetail
2025-02-27 10:47:53 21
-
Lenovo's Ask Tian AI Computing Platform Receives Major Upgrade, Enabling Single-Machine Deployment of 671B-Parameter DeepSeek-R1 ModelDetail
2025-02-26 15:22:05 1
-
Largest Mesozoic Scorpion Fossil Discovered in China: Jeholialongchengi Fills Fossil GapDetail
2025-02-26 10:35:56 1
-
Haier Smart Home Leads the Globalization of Appliance Services: Unified Standards, Setting a New Benchmark for Digital ServicesDetail
2025-02-25 17:39:01 1
-
Douyin Livestreaming Shops: A New Engine Driving the Digital Transformation of the Real EconomyDetail
2025-02-25 17:38:14 21
-
Zhou Hongyi, founder of 360 Group, and Nano AI Search's New Energy Vehicle Giveaway Event Concludes Successfully, Marking a Step Forward in AI PopularizationDetail
2025-02-24 18:36:23 31
-
Leaked CAD Renderings Reveal iPhone 17 Series: Two-Tone Back and Novel Camera Designs Spark InterestDetail
2025-02-24 17:27:08 1
-
Yadea Unveils the Modern Series: High-Style Design Meets Tenfold Safety, Ushering in a New Era of Women's CommuteDetail
2025-02-24 14:34:28 1
-
IBM's mandatory return-to-office policy sparks controversy: disguised layoffs, unfair to employees?Detail
2025-02-24 14:15:41 1
-
Apple Halts iCloud Advanced Data Protection in UK: A Stand Against Government 'Backdoor' DemandsDetail
2025-02-24 14:10:40 31
-
S&P Global Sustainability Yearbook 2024: Baidu's Inclusion Highlights the Crucial Role of AI GovernanceDetail
2025-02-19 21:08:50 1