Thứ Tư, 10 tháng 12, 2014

Giao diện tự động khởi tạo REST của giải pháp ứng dụng 1C:DOANH NGHIỆP

Thực hiện trong phiên bản 8.3.5.1068.

Thông thường, bạn đăng tải giao diện REST trên Web-server và sau đó các hệ thống ngoài có thể truy cập tới ứng dụng của bạn thông qua truy vấn HTTP. Hiện giờ, nền tảng có thể tự động tạo ra giao diện REST cho tất cả các giải pháp ứng dụng.

Giao diện REST cho phép đọc dữ liệu 1C:DOANH NGHIỆP, thay đổi, tạo các đối tượng dữ liệu mới và xóa bỏ những đối tượng đang có.


Bạn có thể sử dụng giao diện REST để:
  • Tích hợp các giải pháp ứng dụng với các trang web và cửa hàng trực tuyến;
  • Thực hiện các chức năng bổ sung của giải pháp ứng dụng bằng các công cụ ngoài mà không cần thay đổi cấu hình;
  • Kết nhập dữ liệu vào giải pháp ứng dụng và kết xuất dữ liệu;
  • Tích hợp giải pháp ứng dụng với hệ thống tập đoàn, thậm chí không cần phải lập trình thêm.
Các thao tác phổ biến được thực hiện thông qua giao diện REST là:
  • Nhận danh sách chứng từ, danh mục, bản ghi của biểu ghi thông tin… có thể sử dụng bộ lọc;
  • Nhận dữ liệu phần tử danh mục, chứng từ (theo tham chiếu), dữ liệu bản ghi của biểu ghi thông tin độc lập (theo khóa), dữ liệu tập hợp bản ghi của biểu ghi trực thuộc (theo người đăng ký);
  • Chỉnh sửa dữ liệu của một phần tử danh mục, chứng từ và các đối tượng tham chiếu khác;
  • Tạo mới phần tử danh mục, chứng từ, tập hợp bản ghi;
  • Kết chuyển một chứng từ, khởi động quy trình nghiệp vụ.
Nền tảng sử dụng giao thức OData phiên bản 3.0 làm giao thức truy cập. Đây là một giao thức web mở dùng để truy vấn và cập nhật dữ liệu. Giao thức này cho phép thao tác với dữ liệu bằng cách sử dụng các truy vấn lệnh HTTP. Có thể nhận được phản hồi trong các định dạng khác nhau, nhưng hiện tại chúng tôi chỉ hỗ trợ làm việc với các dữ liệu dưới định dạng Antom/XML.

Trong nền tảng này, chúng tôi đã thực hiện phần Sever của dịch vụ REST. Nghĩa là giải pháp ứng dụng có thể tự động cung cấp chức năng qua dịch vụ REST. Để tương tác với dịch vụ REST bên ngoài từ 1C:DOANH NGHIỆP (để tổ chức phần Client), có thể sử dụng các công cụ làm việc với HTTP có sẵn trong nền tảng: các đối tượng HTTPConnection, HTTPRequest và HTTPResponse.

Tuy nhiên chúng ta thấy nhiệm vụ chính của giao diện REST là để tích hợp với công cụ ngoài. Và ở đây, không phát sinh vấn đề nào cả, vì Client OData thực tế đã được sử dụng cho tất cả các nền tảng lớn:
  • Di động: iOS, Windows Phone, Android;
  • Server/ máy để bàn: .NET, Java, PHP, Objective-C, Ruby, JavaScript;
  • Hỗ trợ cho các hệ thống quản trị nội dung (CMS): Drupal, Joomla.
Sử dụng giao diện chuẩn của giải pháp ứng dụng OData rất đơn giản:
  • Trong cấu hình, bạn đăng tải giao diện REST – hộp kiểm "Đăng tải giao diện chuẩn Odata";
  • Sau đó, các đối tượng của giải pháp ứng dụng trở nên khả dụng qua giao diện này;
  • Các phương pháp xác thực OData Client hoàn toàn trùng với các phương pháp thực hiện qua Web-service;
  • Odata Client có thể truy vấn qua HTTP văn bản Metadata, mô tả các đối tượng có sẵn của giải pháp ứng dụng;
  • Odata Client thực hiện thao tác tạo mới, đọc, chỉnh sửa và xóa dữ liệu của giải pháp ứng dụng.
Trong giao diện REST có sẵn tất cả các các đối tượng chính của cấu hình: danh mục, chứng từ, hằng, liệt kê, sơ đồ trao đổi, biểu ghi tích lũy, biểu ghi tính toán, biểu ghi kế toán và biểu ghi thông tin, bảng ảo của biểu ghi thông tin định kỳ, biểu ghi kế toán và biểu ghi tích lũy, sơ đồ trao đổi, hệ thống dạng đặc tính và hệ thống dạng tính toán, các quy trình nghiệp vụ, nhiệm vụ và nhật ký chứng từ.

Hiện tại chưa có sẵn các báo cáo, bộ xử lý, lệnh, các tiêu chí lọc, nhiệm vụ thường kỳ, nguồn dữ liệu ngoài và người sử dụng.

Trong giao diện REST có sẵn các mục tin của đối tượng cấu hình, có thể tạo, đọc, tùy chỉnh, xóa dữ liệu và các phương thức của ngôn ngữ hệ thống. Ví dụ:
  • Đối với chứng từ - Post() và Unpost();
  • Đối với nhiệm vụ - ExecuteTask();
  • Đối với quy trình nghiệp vụ - Start();
  • Đối với biểu ghi thông tin - SliceLast() và SliceFirst();
  • Đối với biểu ghi tích lũy và biểu ghi kế toán - Balance(), Turnovers() và BalanceAndTurnovers();
  • Đối với biểu ghi tính toán - ScheduleData(), ActualActionPeriod(), <TênTínhlại>() và Cơsở<Tên của bản ghi tính toán cơ sở>().
Việc đọc dữ liệu được thực hiện bởi truy vấn GET. Ví dụ, đọc danh sách các danh mục Goods (từ đây về sau chỉ gọi ngắn gọn tên của truy vấn):

GET /OData_Tests_Infobase/odata/standard.odata/Catalog_Goods
 Ví dụ, đọc dữ liệu từ một phần tử danh mục Goods theo GUID:

GET /OData_Tests_Infobase/odata/standard.odata/Catalog_Goods(guid'7f4b5034-0331-11e3-b914-5404a6a68c42')
Tạo một phần tử dữ liệu mới được thực hiện bởi truy vấn POST. Giá trị của tham chiếu được GUID truyền vào bằng không. Khi tạo và thay đổi các đối tượng, giá trị của các thuộc tính được truyền vào nội dung truy cấn với định dạng XML (ở đây nội dung truy vấn được nhập đầy đủ):

POST  /OData_Tests_Infobase/odata/standard.odata/Catalog_Goods HTTP/1.1
Content-Type: application/atom+xml
DataServiceVersion: 3.0;NetFx
MaxDataServiceVersion: 3.0;NetFx
Accept: application/atom+xml,application/xml
Accept-Charset: UTF-8
User-Agent: 1C-Enterprise
Host: test-host:8090
Content-Length: 1610
<?xml  version="1.0" encoding="utf-8"?>
<entry  xmlns=http://www.w3.org/2005/Atom
        xmlns:d=http://schemas.microsoft.com/ado/2007/08/dataservices
        xmlns:m=http://schemas.microsoft.com/ado/2007/08/dataservices/metadata
        xmlns:georss=http://www.georss.org/georss
        xmlns:gml=http://www.opengis.net/gml>
   <category term="EnterpriseV8.CatalogGoods"  scheme=http://schemas.microsoft.com/ado/2007/08/dataservices/scheme />
   <id />
   <title />
   <updated>2013-08-12T11:48:25Z</updated>
   <author>
      <name />
   </author>
   <content type="application/xml">
      <m:properties>
         <d:Code>157</d:Code>
         <d:DeletionMark>false</d:DeletionMark>
         <d:Description>Áo mayô xanh</d:Description>
         <d:IsFolder>false</d:IsFolder>
         <d:Parent_Key m:null="true" />
         <d:Ref_Key m:type="Edm.Guid">00000000-0000-0000-0000-000000000000</d:Ref_Key>
         <d:Marking m:null="true" />
         <d:Supplier_Key>F400322D-7AE8-4803-A7BE-0D80E525E8C2</d:Supplier_Key>
      </m:properties>
   </content>
</entry>
Truy vấn PATCH thực hiện sửa đổi dữ liệu hiện có. Ví dụ, thay đổi dữ liệu của một phần tử danh mục Goods theo GUID'y:

PATCH /OData_Tests_Infobase/odata/standard.odata/Catalog_Goods(guid'7f4b5034-0331-11e3-b914-5404a6a68c42')
Để xóa dữ liệu, sử dụng truy vấn DELETE (sau này, việc đánh dấu xóa sẽ được thực hiện trong các thao tác OData riêng biệt):

DELETE/OData_Tests_Infobase/odata/standard.odata/Catalog_Goods(guid'7f4b5034-0331-11e3-b914-5404a6a68c42')
Các phương pháp của đối tượng ngôn ngữ hệ thống được thực hiện bởi truy vấn POST. Ví dụ, kết chuyển chứng từ:

POST/OData_Tests_Infobase/odata/standard.odata/Document_Invoice(guid'17ed2041-0345-11e3-b914-5404a6a68c42')/Post()

Trong trường hợp bị lỗi, 1C:DOANH NGHIỆP phản hồi với trạng thái HTTP 4XX hoặc 5XX. Trạng thái 4XX chỉ ra lỗi là do thao tác sai của Client, trạng thái 5XX chỉ ra lỗi trên Server. Trong trường hợp trạng thái 4XX, 1C:DOANH NGHIỆP sẽ cố gắng hỗ trợ Client hiểu được nguyên nhân của lỗi và có thể gửi mã lỗi nội bộ bổ sung và thông báo.

Khi đọc và ghi dữ liệu thông qua giao diện REST, nền tảng thực hiện kiểm tra thông thường về quyền sử dụng và gọi ra hàm xử lý sự kiện, ngoại trừ kiểm tra việc điền.

Khi làm việc thông qua giao diện REST có hỗ trợ phong tỏa tự do dữ liệu. Khi truy vấn dữ liệu (của một đối tượng hoặc danh sách), cùng với dữ liệu, nền tảng trả về giá trị của (các) trường PhiênbảnDữliệu. Trong các truy vấn PUT, PATCH và DELETE tiếp theo với cùng dữ liệu này, có thể truyền cho 1C:DOANH NGHIỆP phiên bản của dữ liệu đã đọc. Nếu tại thời điểm này, phiên bản dữ liệu trong cơ sở thông tin không bị thay đổi thì thao tác truy vấn được thực hiện.

Khi nhận danh sách dữ liệu, có thể sử dụng điều kiện chuẩn để lọc truy vấn ODATA. Ví dụ, để nhận các hàng hóa có đơn giá thấp hơn hoặc bằng 3,5 hoặc lớn hơn 200:

GET /OData_Tests_Infobase/odata/standard.odata/Catalog_Goods?$filter=Price le 3.5 or Price gt 200
Nhờ sự linh hoạt và đa nền tảng, chúng tôi thiết lập giao diện tự động khởi tạo REST như là công cụ chính để tích hợp với các hệ thống ngoài. Vì vậy, chúng tôi dự kiến sẽ dừng phát triển và hỗ trợ Web mở rộng.