رابط استاندارد odata را منتشر کنید.

چاپ (Ctrl+P)

می توانید قسمت دوم را تماشا کنید

اطلاعات عمومی

در نسخه پلتفرم 8.3.5.1068 ، که در سپتامبر 2015 منتشر شد، مکانیزمی برای ادغام 1C با برنامه های خارجی از طریق فناوری ظاهر شد. رابط REST. این پلتفرم از پروتکل OData به عنوان پروتکل دسترسی استفاده می کند. این یک پروتکل وب باز برای پرس و جو و به روز رسانی داده ها است. این به شما امکان می دهد داده ها را با استفاده از دستورات HTTP به عنوان درخواست دستکاری کنید. در نسخه 8.3.5.1068 امکان دریافت پاسخ فقط در قالب وجود داشت Atom/XML . با این حال، با شروع نسخه 8.3.8.1652 در آگوست 2017، گزینه دوم برای دریافت داده ها در قالب JSON (جاوا اسکریپت Object Notation) ظاهر شد. . در مقایسه با XML، خواندن آن توسط افراد آسان است و فضای کمتری را اشغال می کند. علاوه بر این، همه مرورگرها دارای ابزارهای داخلی برای کار با JSON هستند.

کار با پروتکل OData در پلتفرم 1C: Enterprise را می توان در کتاب 1C: راهنمای توسعه دهنده در فصل 17 یافت. مکانیسم های خدمات اینترنتی، پاراگراف 17.2.1 رابط استاندارد OData.همچنین می توانید به نمونه هایی از گسترش پشتیبانی از پروتکل OData نگاه کنید.

مزیت استفاده از رابط REST. نتیجه می گیرد که برای دسترسی به داده های سیستم از یک برنامه خارجی نیازی به تغییر کد نیست راه حل کاربردی(به عنوان مثال، اگر راه حل برنامه پشتیبانی می شود). برای به دست آوردن این دسترسی، باید برنامه را به روشی خاص در وب سرور منتشر کنید و مشخص کنید که کدام اشیاء پیکربندی در این روش استفاده خواهند شد. سپس سیستم های شخص ثالث می توانند با استفاده از درخواست های HTTP به برنامه شما دسترسی پیدا کنند.

انتشار رابط استاندارد OData با استفاده از گفتگوی انتشار در وب سرور انجام می شود (مدیریت - انتشار به وب سرور) و در کتاب 1C: Enterprise 8.3 شرح داده شده است. ” راهنمای مدیر ” .
مهم!برای اینکه اشیاء پیکربندی از طریق رابط استاندارد OData قابل دسترسی باشند، باید با استفاده از روش زمینه جهانی فعال شود. SetComposition ofStandardInterfaceOData().
مکانیسم تنظیم ترکیب اشیاء موجود با استفاده از رابط استاندارد OData می تواند به عنوان پردازش خارجی انجام شود. این نیازی به اصلاح راه حل کاربردی ندارد.

برای تعامل با یک وب سرور REST خارجی از 1C: Enterprise، از ابزارهای موجود در پلتفرم برای کار با اشیاء HTTP استفاده می کنیم. HTTPConnection، HTTPRequest و HTTPRsponse.

در این سری از مقالات، نمونه هایی از عملیات معمولی را با استفاده از روش HTTP مربوطه نشان خواهم داد.

  • دریافت داده - روش دریافت کنید;
  • ایجاد یک شی - روش ارسال کنید;
  • به روز رسانی داده ها: روش پچ- در این مورد، شما می توانید فقط آن ویژگی هایی را که نیاز به به روز رسانی دارند را مشخص کنید. روش قرار دادن- در این مورد، لازم است تمام ویژگی های موجودیت مشخص شود.
  • روش حذف داده ها حذف کنید.

1. نمونه هایی از اکتساب داده ها. روش HTTP GET

سرور یک پایگاه داده خواهد بود که بر روی وب سرور با نام منتشر شده است WebBuh(پایگاه آزمایشی "حسابداری سازمانی 3.0"). من از فرمت JSON به عنوان فرمت تبادل داده استفاده خواهم کرد. اطلاعات بیشتر در مورد کار با JSON در اسناد موجود نوشته شده است. برای دریافت داده از سرور با استفاده از روش HTTP GET، باید یک شی ایجاد کنیدخواندن JSON برای خواندن اطلاعات JSON به صورت متوالی از یک فایل یا رشته. برای سازماندهی ضبط متوالی اشیا و متون روی سرور با استفاده از روش HTTP POST PATCH PUT، باید یک شی ایجاد کنید.ورودی JSON.

توجه داشته باشید که روش DELETE به JSON نیاز ندارد. برای نشان دادن جریان خواندن و نوشتن JSON هنگام دسترسی به رابط REST، تابع تعریف شده توسط کاربر زیر را با هدف عمومی فراخوانی می‌کنم. :

با HTTPMethodOnServer تماس بگیرید // <Описание функции>&روی سرور // // پارامترها: // - رشته ای حاوی نام متد HTTP برای درخواست ("POST""PATCH"، "PUT"، "GET"، "DELETE" //<АдресРесурса>- شی HTTPConnection //<ОтправляемыеДанные>- رشته ای از منبع http که درخواست HTTP به آن ارسال خواهد شد.// - یک ساختار یا تطابق حاوی داده‌های ارسال شده به آدرس مشخص شده برای پردازش // روی سرور با استفاده از روش HTTP مشخص شده "POST" یا "PATCH" یا "PUT" // مقدار بازگشت: // ساختار پاسخ سرور بسته به روش HTTPM// تابع تماس HTTPMethodOnServer(HTTPMethod، HTTPConnection، ResourceAddress، SentData =تعریف نشده) // یک درخواست HTTP ایجاد کنید Headers = new Match(); سرفصل ها.درج ); ("Content-Type"، "application/json")؛ درخواست HTTP = درخواست HTTP جدید (آدرس منبع، سرصفحه ها // برای ایجاد و به روز رسانی داده ها، Json را بنویسیداگر HTTPMethod = "POST" یا HTTPMethod = "PATCH" یا HTTPMethod = "PUT" سپس JSON Entry = New JSON Entry ; ParametersJSON = جدید ParametersRecordsJSON (خط WrapJSON.Auto,","True);, RecordJSON.SetString ); // RecordJSON.SetString(ParametersJSON)؛ WriteJSON(WriteJSON(); SentDataدر این مورد LineForBody = مورد نیاز است RecordJSON.Close, UsingByteOrderMark.استفاده نکنید) endIf; // روش HTTPConnection را فراخوانی کنید ResponseHTTP = HTTPConnection.CallHTTPMethod(HTTPMethod، HTTPRequest) ; ساختار پاسخ= ساختار جدید ; ساختار پاسخ.Insert("StatusCode", ResponseHTTP.StatusCode); // JSON را فقط برای متد GET بخوانیداگر روش HTTPM="GET"سپس TryReadJSON = NewReadJSON ; ServerResponse = ResponseHTTP.GetBodyAsString ("UTF-8")؛ ReadJSON.SetString(ServerResponse) ;مطابقت = ReadJSON(ReadJSON"، درست)؛",Response Structure.Insert() ; ServerResponseمکاتبه ساختار پاسخدرج (" پاسخ سرور رمزگشایی نشده است; "، ServerResponse)؛ استثناگزارش(ErrorDescription()) ساختار پاسخ بازگشت تعریف نشده؛ EndAttempt;

EndIf بازگشت ; EndFunction // فراخوانی HTTPMethodOnServer()برای دریافت از سرور در فرمت JSONهنگام دسترسی به رابط REST یک راه حل کاربردی، باید آدرس منبع را مشخص کنید

$format=json. یا نوع MIME را مشخص کنید "application/json" ; در عنوان: WebBuh Headers = new Match(); Headings.Insert("Content-Type"," "application/json") آدرس منبع = ";

/odata/standard.odata/ ?$format=json

  • RequestHTTP = جدید HTTPRequest (آدرس منبع، سرصفحه ها)ویژگی زمینه جهانی ReadJSON (ReadJSON، True)اگر پارامتر دوم روی True تنظیم شده است، شی را بخوانید JSON
  • در تکمیل خواهد شد

مکاتبه

.اگر روی False تنظیم شود، اشیا به یک شی از نوع خوانده می شوند

ساختار.

هنگامی که اشیاء JSON را در یک ساختار deserialize می کنید، باید از الزامات کلیدی ساختار آگاه باشید. اگر هنگام deserialization یک شی، یک نام مشخصه یافت شود که برای یک کلید ساختار معتبر نیست، یک استثنا ایجاد می شود. 1. 1 پیکربندی پارامترهای اتصال HTTP برای سازماندهی بخش مشتری تعامل با یک وب سرور REST خارجی، یک پیکربندی کلاینت بر اساس BSP از ابتدا ایجاد کردم. با استفاده از این پیکربندی، من یک مرجع برای تنظیم پارامترهای اتصال ایجاد کردم (شکل 1 را ببینید). شکل 1 دایرکتوری برای تنظیم پارامترهای اتصال HTTP به امنیت اطلاعات خارجی از طریق رابط استراحتپس از فشار دادن دکمه

پاسخ سرور را بررسی کنید، رویه ای فراخوانی می شود که در آن مشتری سعی می کند پاسخی از سرور دریافت کند.کد برنامه روال در زیر نوشته شده است:رویه &OnClient CheckConnection(Command) آدرس = Object.ServerAddress; کاربر =<>شیء.کاربر; رمز = Object.Password;; ResourceAddress = DatabaseName + "/odata/standard.odata/ "; فراداده $ ServerResponse//یک تابع سفارشی را فراخوانی کنید = ببا HTTPMethodOnServer تماس بگیرید ("GET" ,) HTTPConnection، ResourceAddress ساختار پاسخ <> ; اگر تعریف نشده سپس; General PurposeClientServer.NotifyUser("کد وضعیت"+ ساختار پاسخ. کد وضعیت)

بی پایان؛ پایان رویه هدف از این رویه استبررسی سرویس و
آیا کاربر پارامترهای اتصال را به درستی وارد کرده است یا خیر. برای انجام این کار، فقط یک درخواست GET را انجام دهید: HTTPConnection.CallHTTPMmethod("دریافت"
، درخواست HTTP)؛
با استفاده از آدرس منبع: =آدرس منبع+ BaseName “;
/odata/standard.odata/
همچنین می توانید با استفاده از این سرویس در مرورگر خود بررسی کنید
URL http://host/WebBuh/odata/standard.odata. نتیجه چنین پرس و جوی فقط فهرستی از موجودیت ها است. برای دریافتتوضیحات کامل
رابط استاندارد OData (لیست موجودیت های موجود، ویژگی ها و عملکردهای آنها در قالب XML سند.) باید یک درخواست GET را با استفاده از پارامتر انجام دهید فراداده $. نشانی اینترنتی http://host/WebBuh/odata/standard.odata/$metadata.توضیحات مفصل
سند را می توان از http://www.odata.org/documentation/ (به زبان انگلیسی) دریافت کرد. می توانید پاسخ ها را در قالب دریافت کنید Atom/XML

  • 100-199 یا JSON کدهای وضعیت پاسخ HTTP را می توان مشاهده کرد پاسخ ها در محدوده های زیر:
  • 200-299 - پاسخ های اطلاعاتی که نشان می دهد درخواست مشتری پذیرفته شده و در حال پردازش است.
  • 300-399 - به این معنی است که درخواست مشتری با موفقیت پردازش شد.
  • به این معنی که درخواست تکمیل نشده است و مشتری باید اقداماتی را برای برآورده کردن درخواست انجام دهد.
  • 500-599 400-499 - در مورد خطاها در سمت برنامه مشتری اطلاع می دهد. این کدها همچنین ممکن است نشان دهند که اطلاعات اضافی از مشتری مورد نیاز است.

- از خطای سمت سرور اطلاع می دهد که نشان می دهد سرور با خطا مواجه شده است و احتمالاً نمی تواند درخواست مشتری را برآورده کند.

1.2 جستجوی یک شی با شناسه تابع زیر برای جستجوی کتاب یا سند مرجع طراحی شده استشناسه منحصر به فرد روی سرور اگر شی پیدا شد، تابع مقدار رشته شناسه (Ref_Key) را برمی گرداند، در غیر این صورت آن را برمی گرداند.تعریف نشده

  • پارامترهای زیر به تابع ارسال می شود:
  • HTTPConnection – شی از نوع HTTPConnection
  • PublicationName - نام پایگاه داده سرور منتشر شده عنصر - شناسه موجودیت شی، به عنوان مثال،کاتالوگ_سازمان ها
  • یا دایرکتوری Document_- سازمان. شناسه - شناسه شی مورد جستجو در سرور، به عنوان مثال،
Organisation.UniqueIdentifier() عملکرد &روی سرور (HTTPConnection,PublicationName,Element,UniqueIdentifier) GUID = String(UniqueIdentifier) // تبدیل به رشته ResourceAddress = + عنصر+ "(راهنما""+ GUID+ "")؟$format=json" ; ServerResponse = ب= ب("دریافت" , ("GET" ,) HTTPConnection، ResourceAddress ServerResponse .StatusCode >= 400 سپس //General PurposeClientServer.NotifyUser(Element+ "Error"+ResponseStructure.StatusCode+ //GeneralPurposeClientServer.NotifyUser(ResponseStructure.ServerResponseUndecrypted); بازگشت تعریف نشده; EndIf مطابقت = ساختار پاسخ. ReplyServer a; آرایه = مطابقت ["ارزش"]; If Array = Undefined then Return Match["Ref_Key"] Alse Return Array["Ref_Key"];

endIf; EndFunction پارامتر

آدرس منبع برای دسترسی به یک سرویس REST استفاده می شود. برای بررسی عملکرد سرویس، می توانید منبع را در مرورگر به این صورت مشخص کنید

  • http://(WebServerAddress)/(PublicationName)/odata/standard.odata/(Element)? (پارامترها)، کجا
  • آدرس وب سرور– آدرس وب سروری که سرویس بر روی آن منتشر شده است، به عنوان مثال Localhost
  • BaseName NamePublications
  • - نام پایگاه اطلاعاتی مشخص شده هنگام انتشار راه حل – علامت دسترسی به رابط استاندارد OData
  • عنصر- شناسه منبع یا منابع از پیش تعریف شده به عنوان مثال، Catalog_Account (guid'value').

گزینه ها

- پارامترهای منبع به عنوان مثال، برای انتخاب، به روش پذیرفته شده برای درخواست های HTTP استفاده می شود: ?key=value&key2=value2 1.3 جستجوی یک شی با استفاده از فیلدهای جستجوتابع تعریف شده توسط کاربر زیر برای جستجوی یک شی با فیلدهای جستجو در مواردی که شی با شماره شناسایی باشد طراحی شده است. رشته اشیاء تابع

Ref_Key - شماره شناساییعملکرد &روی سرور P searchObjectBySearchFields (HTTPConnection,PublicationName,Element,SearchFields) شرط = "" ; = شرط = "" ; + برای هر KeyValue از حلقه فیلد جستجووضعیت KeyValue.Key+ "Eq"" + KeyValue.Value =+ "" و "; End Cycle;; متن درخواستی Lev (شرط، طول (وضعیت) -5)= // حذف 5 کاراکتر آخر +آدرس منبع PublicationName+ "/odata/standard.odata/"عنصر+ "?$filter=" + متن درخواستی" ; + "&$format=json& ساختار پاسخ= $select=Ref_Key //با تابع سفارشی من تماس بگیرید CallHTTPMethodOnServer(اگر ساختار پاسخ "دریافت" ,HTTPConnection,ResourceAddress)؛ .StatusCode >= 400 سپس ساختار پاسخ. ReplyServer a; آرایه = //General PurposeClientServer.NotifyUser(Element+ "Error"+ResponseStructure.StatusCode); //General PurposeClientServer.NotifyUser(ResponseStructure.ServerResponseUndecrypted);; If Array = Undefined then Return Match ["Ref_Key" ] Else Return Array ["Ref_Key" ];

endIf; EndFunctionهمانطور که از بدنه روش مشاهده می شود پsearchObjectBySearchFields، انتخاب با کلمه کلیدی شروع می شود$ فیلتردر آدرس منبع پارامتر رسمیفیلدهای جستجو –

این مکاتباتی است که حاوی نام ها و مقادیر جزئیات است.

  • لطفاً توجه داشته باشید که نام جزئیات گاهی مشخص نیست. لازم به یادآوری است که برای کتب مرجع:
  • کد - کد،
  • توضیحات - نام
  • DeletionMark – علامت حذف،
  • IsFolder - علامت گروه،
  • Parent_Key – والد.

اگر ویژگی از نوع مرجع باشد، پسوند _Key باید به نام آن اضافه شود، برای مثال Account_Key.

  • برای مدارک:
  • شماره – شماره سند،

تاریخ - تاریخ سند.

  • عملیات انتخاب منطقی
  • eq - برابر; /Catalog_Cities؟$filter=Name eq ‘Main’;
  • ne - مساوی نیست. /Catalog_Cities?$filter=Name ne ‘Perm’; gt - بیشتر؛/کاتالوگ_محصولات؟$filter=
  • قیمت gt 10;
  • ge - بزرگتر یا مساوی با؛ /Catalog_Products؟$filter=قیمت ge 10;
  • lt - کمتر؛ /Catalog_Products؟$filter=قیمت lt 10;
  • le - کمتر یا مساوی با; /Catalog_Products؟$filter=قیمت 10;
  • یا - منطقی OR; /کاتالوگ_ محصولات ?$filter= قیمت lt 10 یا قیمت gt 100;
  • و - منطقی و. / کاتالوگ _محصولات؟$ فیلتر =قیمت g t 10 و قیمت l t 100;

نه - نفی; /کاتالوگ_ محصولات ?$filter=not (قیمت معادل 10); - نام پایگاه اطلاعاتی مشخص شده هنگام انتشار راه حلهمچنین توجه داشته باشید که مقدار پارامتر واقعی است (یا موجودیت)) که به تابع منتقل می کنم

بر اساس قانون زیر تشکیل می شود:.

پسوند Name Prefix_ConfigurationObjectName_Name با استفاده از رابط استاندارد OData، می توانید به اشیاء زیر دسترسی داشته باشید ():

  • پیشوند نام
  • دایرکتوری - کاتالوگ;
  • سند - سند;
  • مجله اسناد - DocumentJournal;
  • ثابت - ثابت;
  • طرح تبادل - ExchangePlan;
  • نمودار حساب - ChartOfAccounts
  • نمودار انواع محاسبات - ChartOfCalculationTypes;
  • نمودار انواع مشخصه - ChartOfCharacteristicTypes;
  • ثبت اطلاعات - InformationRegister;
  • Accumulation Register - AccumulationRegister;
  • ثبت محاسبه - CalculationRegister;
  • ثبت حسابداری - AccountingRegister;
  • فرآیند کسب و کار - BusinessProcess;

وظیفه - وظیفه. ConfigurationObjectName

- ویژگی "Name" شیء پیکربندی همانطور که در پیکربندی مشخص شده است.پسوند نام

  • - مورد نیاز برای روشن کردن نام منبع، اختیاری است، می تواند مقادیر زیر را داشته باشد:
  • نام قسمت جدولی شی.
  • نام جدول مجازی شی.
  • RowType - ردیف قسمت جدولی شی.

RecordType - یک ورودی ثبت جداگانه.

پس از تشکیل نام منبع، باید پارامترهای دسترسی به منبع را تعریف کنید، به عنوان مثال، ?$filter= معنی &فرمت $=json& $select= Ref_Key ,

  • ، انتخاب با کلمه کلیدی شروع می شود- انتخاب هنگام دریافت داده ها
  • فرمت $- فرمت داده های برگشتی را نشان می دهد،
  • $انتخاب کنید- فهرستی از ویژگی های موجودیت که در نتیجه پرس و جو گنجانده می شود.
  • فراداده $- توضیحی از رابط استاندارد OData را برمی‌گرداند (بدون تعیین پسوند نام، به عنوان مثال در یکی از تصاویر بالا استفاده می‌شود).
  • بالای $- محدود کردن تعداد رکوردهای برگشتی
  • $ رد شدن- تعداد مشخص شده رکورد را از نتیجه پرس و جو حذف می کند.
  • $count- تعداد رکوردهای انتخابی پرس و جو را برمی گرداند.
  • $inlinecount=allpage(=هیچکدام)- اطلاعات مربوط به تعداد رکوردها را به نتیجه پرس و جو اضافه می کند
  • $orderby=<Реквизит1>صعودی،<Реквизит2>توصیف- مرتب سازی نتیجه پرس و جو
  • فقط مجاز است- فقط موارد مجاز (بدون علامت "$" استفاده می شود).

1.4 آرایه ای از ورودی های ثبت اطلاعات را دریافت کنید

بیایید به نمونه ای از به دست آوردن آرایه ای از رکوردهای ثبتی حاوی نام کامل افراد نگاه کنیم، به عنوان مثال، تاریخچه تغییرات در نام کامل یک فرد.

NamePublications = "WebBuh"; Element = "InformationRegister_Name of Individuals"; دوره = تعریف نشده; ReferenceType Data= new Structure(); دی DataReferenceType.Insert("Individual",Individual_Key); DataNON-ReferenceType= new Structure(); DataNON-ReferenceType.Insert("Individual_Type"، "StandardODATA.Catalog_Individuals") آرایه = GetRegisterInfoSet(HTTPConnection,PublicationName,Element,Period, DimensionsReferenceType, ابعاد غیر ReferenceType)

بدنه تابع GetInfoRegisterRecordSet که در این مثال فراخوانی شده است، در زیر نشان داده شده است

عملکرد &روی سرور GetSetRecordRegisterInformation(HTTPConnection,PublicationName,Element,Period =Undefined, DimensionsReferenceType= تعریف نشده ابعاد غیر ReferenceType= تعریف نشده) RequestText = "" ;اگر دوره<>تعریف نشده سپس FormattedPeriod= قالب (دوره،"DF=yyyy-MM-ddTHH:mm:ss")؛ RequestText = "Period = datetime"" + FormattedPeriod + """ ; endIf; DimensionsReferenceType <>اگر DimensionsReferenceTypeتعریف نشده سپس برای هر KeyValue Of Cycle Powered = ? (ValueFilled (QueryText)، "," ,""); RequestText = RequestText برای هر KeyValue از حلقه فیلد جستجو+ روشن شد + KeyValue.Key+ "=guid(""+ ابعاد غیر ReferenceType<> ; اگر+ "")"؛ EndCycle؛ EndIf؛ If ابعاد غیر ReferenceType برای هر معنای کلیدی چرخه Cycle Powered = ? ( ValueFilled پرسیده شد =؟ ( QueryText = QueryText + Fed + ک + "=" + KeyValue.Key keyMeaning.Key ; چرخه پایان endIf; ResourceAddress=PublicationName + " /odata/standard.odata/" + "+ عنصر + "("+ متن درخواست +"; + "&$format=json& ساختار پاسخ = برای نشان دادن جریان خواندن و نوشتن JSON هنگام دسترسی به رابط REST، تابع تعریف شده توسط کاربر زیر را با هدف عمومی فراخوانی می‌کنم.) ?$format=json ساختار پاسخ("GET",HTTPConnection,ResourceAddress)؛ اگر//General PurposeClientServer.NotifyUser(Element+ "Error"+ResponseStructure.StatusCode); //General PurposeClientServer.NotifyUser(ResponseStructure.ServerResponseUndecrypted); بازگشت تعریف نشده؛ endIf; 0

مطابقت =

بررسی اجمالی OData OData یک API مبتنی بر وب برای دسترسی و دستکاری داده ها است. شبیه به API های mini-ODBC و JDBC است، اما منحصراً بر اینترنت متمرکز است. به طور خاص، OData به مشتریان این امکان را می‌دهد که URIهایی بسازند تا مجموعه‌ای از موجودیت‌ها را نام‌گذاری کنند، موجودیت‌های موجود در آن مجموعه را فیلتر کنند، و روابط را با موجودیت‌ها و مجموعه‌های موجودیت‌های مرتبط ردیابی کنند. برای دریافتاطلاعات اضافی به مقدمه OData: دسترسی به داده برای وب، ابر، دستگاه های تلفن همراه و موارد دیگر مراجعه کنیددستگاه های تلفن همراه

و غیره).

شکل 1: قرار دادن پایگاه داده خود در وب با استفاده از یک ارائه دهنده OData با هدف عمومی

نمودار در شکل 1 نشان می دهد که چگونه منبعی مانند پایگاه داده می تواند از طریق یک ارائه دهنده OData همه منظوره در معرض اینترنت قرار گیرد. نحو OData اجازه می دهد تا داده های موجود در پایگاه داده فوق به روش های مختلف (ایجاد، به روز رسانی، حذف، پرس و جو) با استفاده از مرورگرهای وب دستکاری شوند.

شکل 2. CSDL (زبان تعریف طرحواره مفهومی)

شکل 2 طرحواره CSDL (Conceptual Schema Definition Language) را نشان می دهد. CSDL یک ابزار اختیاری است که به برنامه های کاربردی کمک می کند تا ساختار داده های در معرض دید را درک کنند. CSDL مشابه ابرداده در JDBC و ODBC است، به برنامه های کاربردی کلاینت کمک می کند تا بفهمند دقیقاً به چه چیزی دسترسی دارند.

هزاران API مبتنی بر وب در اینترنت وجود دارد. OData یک نمونه از چنین API است. اطلاعات بیشتر در مورد API های مبتنی بر وب را می توانید در وب سایت پیدا کنید: Web Programmable. استانداردسازی چنین واسط‌هایی ادغام را در این حوزه فناوری مهم بهبود می‌بخشد و به نوآوری کمک می‌کند تا با نیازهای بازار، به‌ویژه حمایت از طرح‌های داده‌های جدید و طرح‌های داده باز، همگام شود.

OData در سازمان OASIS

پیش نویس منشور OData به سازمان پیشرفت استانداردهای اطلاعات ساختاریافته (OASIS) ارائه شد. در زیر گزیده ای از متن این سند آمده است.

  • ایجاد سرویس های داده RESTful بر اساس HTTP، توانایی شناسایی منابع با استفاده از URI (شناسه منبع یکسان) و تعریف منابع با استفاده از مدل داده انتزاعی، امکان انتشار و ویرایش توسط مشتریان وب با استفاده از پیام های HTTP ساده.
  • افشای و بازیابی اطلاعات از منابع مختلف، از جمله، اما نه محدود به، پایگاه داده های رابطه ای، سیستم های فایل، سیستم های مدیریت محتوا و وب سایت های سنتی.

اسناد مشخصات OData ارسال شده به OASIS و همچنین پیش نویس منشور در لینک های زیر موجود است.

علاوه بر مشخصات OData، چهار سند زیر با پسوند OData به سازمان OASIS ارائه شده است.

این اسناد گسترش برای شروع کار بر روی کمیته فنی پیشنهادی OASIS OData در نظر گرفته شده است. می توانید منشور و اسناد توسعه کامل OData را در وب سایت OASIS مطالعه کنید.

محصولات OData و IBM

محصولات آی بی ام زیر از OData پشتیبانی می کنند.

  • محصولی برای پشتیبانی از دسترسی مشتریان مختلف.
  • محصولات DB2 و Informix قادر به استفاده از OData هستند مایکروسافت ویژوالاستودیو. بیشتر اطلاعات دقیقدر مورد این موضوع شامل .

نمونه های OData

این پاراگراف چندین مورد را ارائه می دهد مثال های سادهدر OData دسترسی به سرویس Netflix.

پیش فرض ژانرها عناوین . . . . . . عناوین http://odata.netflix.com/v2/Catalog/Titles/ 2012-05-23T21:41:18Z خواننده اصلی آنتونی کیدیس، نوازنده بیس فلی، ... 2012-01-31T09:45:16Z . . . http://odata.netflix.com/v2/Catalog/Titles("13aly") فلفل قرمز تند تند: راهبان بد بو خواننده اصلی آنتونی کیدیس، بیسیست فلی، درامر چاد اسمیت ... 2012-01-31T09:45:16Z . . . 13علی فلفل قرمز تند تند: راهبان بد بو فلفل قرمز تند تند: راهبان بد بو آنتونی کیدیس خواننده اصلی، فلی نوازنده بیس، چاد اسمیت درامر... 3.4 1991 . . .

OData و سایر APIهای مبتنی بر وب

امروزه هزاران API مبتنی بر وب در حال استفاده هستند. APIهای محبوب در این دسته شامل خدمات نقشه هستند. از ژوئن 2012، وب‌سایت برنامه‌پذیر وب بیش از 6000 API مبتنی بر وب را فهرست کرد (به پست با عنوان: مدل‌های کسب‌وکار API Take Center Stage مراجعه کنید). مطالعه اخیر Vordel نشان داد که «نیمی از شرکت‌ها از APIها برای ایجاد کانال‌های تجاری جدید استفاده می‌کنند» که ۲۵ درصد از این APIها به‌طور خاص برای برنامه‌های کاربردی تلفن همراه توسعه داده شده‌اند.

یکی از زمینه های مورد علاقه نحوه ارتباط OData با تلاش های API داده های پیوندی است. گروه کاری پلتفرم داده های پیوندی W3C (LDP) و کمیته فنی OASIS OData تلاش می کنند تا API های نوع REST را برای بازیابی و دستکاری داده ها در اینترنت با استفاده از مدل های مختلف داده مشخص کنند. پلت فرم LDP بر اساس مدل داده مشخص شده توسط مایکروسافت است و منشأ آن در مدل ارتباطی پیتر چن است که در سال 1976 فرموله شد (مدل EDM هنوز در طراحی پایگاه داده های رابطه ای استفاده می شود). تبدیل اطلاعات به موجودیت ها و روابط این مدل از مقادیر خاص دامنه مانند شماره های تامین اجتماعی، شماره فاکتورها و شماره اقلام برای ارجاع به منابع و ویژگی های آنها و پیوند دادن اطلاعات استفاده می کند.

EDM اطلاعات را به گونه ای ارائه می کند که برای بسیاری از دانشمندان داده آشنا است. این امر درک و استفاده از این مدل را برای توسعه دهندگان بسیار آسان تر می کند. RDF اجازه می دهد تا داده ها در مقیاس جهانی به هم مرتبط شوند و از استنتاج از طریق استنتاج پشتیبانی می کند - یعنی اجازه می دهد حقایق جدید از اطلاعات موجود با استفاده از شناسه های جهانی، تعاریف مرتبط و ویژگی ها استنتاج شوند.

ساخت آداپتورها بین APIهای مبتنی بر وب ناهمگن کاملاً امکان پذیر است. به عنوان مثال، یک آداپتور نمونه اولیه برای پیوند دادن موارد کاری یک راه حل که از طریق یک API مبتنی بر داده پیوندی به نام OSLC (خدمات باز برای همکاری چرخه زندگی) به دست آمده است. اسناد مایکروسافتاشتراک‌پوینت‌های به‌دست‌آمده از طریق OData را می‌توانید در پیوند زیر پیدا کنید: http://wiki.eclipse.org/Lyo/SharepointAdapter.

با گسترش بازار، API های جدید ظاهر می شوند. در حالی که توانایی های آنها ممکن است به درجات مختلف همپوشانی داشته باشد، شکی نیست که توسعه دهندگان به نوآوری در این حوزه فناوری امیدوارکننده با شناسایی موارد استفاده جدید ادامه خواهند داد.

قدردانی

من از همکارانم برای بازخوردها و پیشنهاداتشان تشکر می کنم: الیزابت کلیری، اندرو آیزنبرگ، دایان جردن، آرنو لو هورس.

بیایید برای لحظه ای تصور کنیم که پایگاه های اطلاعاتی روی پلتفرم 1C:Enterprise 8 داریم که باید به طور منظم با داده های آن کار کنیم. اما، متأسفانه، ما این فرصت را نداریم که هیچ یک از تغییرات خود را در پیکربندی آنها ایجاد کنیم. این امکان پذیر است (در صورت وجود یک پلت فرم کامل). یا رایگان "1C:UNF برای اوکراین. میکرو"؛ یا به دلیل مزایای به روز رسانی خودکارما نمی خواهیم پشتیبانی را حذف کنیم. یا شرکت خدماتی هزینه خدمات خود را نام برده است که از مدیریت تایید نشده است اما "برنامه نویس 1C" داخلی وجود ندارد ...

و در چنین شرایطی وظیفه یکپارچه سازی این پایگاه داده و برخی سیستم های خارجی به شما داده می شود. چه کار باید بکنیم و چه گزینه هایی داریم؟ می توان در نظرات مکمل من بود، اما تا کنون دقیقاً 5 راه را می بینم:

  1. دسترسی به پایگاه داده از طریق خانواده اشیاء COM(V83.ComConnector و قبل از آن). محدودیت: پلتفرم باید روی ویندوز نصب باشد.
  2. دسترسی مستقیمبه جداول پایگاه داده در اینجا یک مثال برای یک DBMS آورده شده است. . محدودیت: ممنوعیت دسترسی مستقیم به داده ها در قرارداد مجوز؛ بی ثباتی دسترسی به دست آمده؛ تغییر داده ها می تواند منجر به نقض یکپارچگی منطقی پایگاه داده شود.
  3. با شروع نسخه 8.3.5 پلتفرم، امکان دسترسی به داده ها از طریق فراهم شد رابط REST خودکاربر اساس پروتکل OData v.3.0. محدودیت: باید وب سرور و ماژول افزونه وب سرور ارائه شده با پلتفرم را نصب کنید.
  4. شروع از پلتفرم نسخه 8.3.6 وجود داشت مکانیزم گسترش، که به شما امکان می دهد بدون ایجاد تغییراتی در پیکربندی اصلی، عملکردهای جدید را "دریافت کنید". در میان قابلیت های جدید، خدمات WEB و HTTP وجود دارد که برای ما جالب هستند. با شروع نسخه 8.3.11 پلتفرم، امکان گسترش ساختار جداول پایگاه داده (افزودن جزئیات جدید برای ذخیره داده های سرویس برای اهداف یکپارچه سازی) در دسترس قرار گرفت. محدودیت: داشتن برنامه نویسی ضروری است که برنامه افزودنی را توسعه دهد و عملکرد آن را در طول به روز رسانی نظارت کند. برای خدمات، باید وب سرور و ماژول افزونه وب سرور ارائه شده با پلتفرم را نصب کنید.
  5. شما می توانید "دسترسی فوری" را رد کنید و سپس ما می توانیم استفاده کنیم راه اندازی درمان های خارجیبا استفاده از پارامتر خط فرمان/اجرا کنید. در چنین سناریویی، می توانید به طور منظم برخی از پردازش ها را بر اساس یک برنامه راه اندازی کنید، که یک منبع خارجی را برای دستورالعمل های اجرا بررسی می کند و نتایج کار خود را در آنجا قرار می دهد. همچنین اگر به سیستم عاملی که پایگاه داده در آن قرار دارد دسترسی دارید، می توانید به طور مستقل برنامه مشتری 1C را برای انجام دستورات خود راه اندازی کنید. محدودیت: داشتن برنامه نویسی که پردازش را ایجاد کند ضروری است. وجود تاخیر زمانی در پاسخ سیستم به مقدار فاصله بین راه اندازی در زمانبندی یا زمان شروع برنامه مشتری.

بنابراین در بین 5 گزینه، سریع ترین و آسان ترین راه برای مدیر دسترسی خودکار از طریق پروتکل oData است. این گزینه کراس پلتفرم است.

و گزینه با پروتکل oData از نقطه نظر ایجاد ارتباط با پایگاه داده 1C ارزانتر است. واقعیت این است که مایکروسافت فعالانه آن را تبلیغ می کند. علاوه بر انتشار OData SDK برای توسعه تحت .NET، AJAX، PHP، Java، JavaScript، WebOS و Objective-C، این شرکت پیاده سازی کرده است. این پروتکلبه محصولات محبوب خود: اکسل، پاورپوینت، شیرپوینت، MsSQL و دیگران. بنابراین، نیازی نیست نسخه CommerceML خود را ایجاد کنید و متون XML و JSON را هم در کنار خود و هم در کنار پایگاه داده 1C تجزیه کنید، گویی که خدمات WEB و HTTP خود را پیاده سازی می کنید. هنگام استفاده از OData، بلافاصله کتابخانه های آماده ای برای به دست آوردن یا اصلاح داده ها برای استفاده در سیستم خارجی خود خواهید داشت، در حالی که در کنار پایگاه داده 1C همه چیز به طور خودکار اتفاق می افتد.

آیا یک دقیقه گذشته است؟

ما می توانیم نفس خود را بیرون بیاوریم - دیگر هیچ محدودیتی نداریم و می توانیم هر ادغامی که بخواهیم انجام دهیم! من به طور خاص تخیل خود را در ابتدا محدود کردم تا برای مدت طولانی تمام گزینه های کتاب معروف "تکنولوژی های ادغام 1C: Enterprise" ISBN 978-5-9677-1462-7 توسط D.I. و Khrustaleva E.Yu (و مخصوصاً زمان را تلف نکنید نقاط ضعفاین گزینه ها). می‌توانید حرف من را اینجا قبول کنید یا می‌توانید در نظرات بحثی را شروع کنید، اما گزینه OData همچنان جذاب‌ترین گزینه است.

برای کسانی که به موضوع علاقه مند هستند، لطفاً به وب سایت رسمی پروتکل - www.odata.org مراجعه کنند. یک بار دیگر توجه شما را به این نکته جلب می کنم که علیرغم اینکه نسخه فعلیپروتکل در حال حاضر 4.0 است و توسط کنسرسیوم OASIS در 17 مارس 2014 استاندارد شده است، اما پلت فرم 1C:Enterprise 8 هنوز از پروتکل بیشتری استفاده می کند. نسخه اولیه 3.0. به هر حال، فراموش نکنید که به بخش اکوسیستم پروتکل نگاه کنید و ذکر 1C: Enterprise ما را تحسین کنید که اولین بار در لیست است :))

تنظیمات مورد نیاز

همانطور که قبلاً اشاره کردم، شما باید یک وب سرور داشته باشید. با شروع از نسخه 8.4، بخش سرور پلتفرم قبلاً وب سرور مخصوص به خود را خواهد داشت، اما در حال حاضر باید از سرورهای شخص ثالث - IIS یا Apache استفاده کنیم. نحوه تنظیم همه چیز به خوبی در دفترچه زرد برای مدیر توضیح داده شده است. اما اگر تصاویر و تجربیات دیگران را دوست دارید، در اینجا یک جستجوی سریع دارید: . اگر مشکلی پیش آمد، راهنمای مدیر نسخه پلتفرم خود را بخوانید - همه چیزهایی که نیاز دارید وجود دارد.

هنگامی که قبلاً یک وب سرور را نصب کرده اید و دیگر در هنگام راه اندازی به دلیل مشکلات گسترش دسترسی به 1C از کار نمی افتد (بیایید حدس بزنیم - آپاچی 32 بیتی و یک پلت فرم 64 بیتی را نصب کرده اید)، مقدار کمی باقی می ماند. در پیکربندی، به منوی "Administration" بروید و روی دستور "انتشار در وب سرور..." کلیک کنید. در پنجره ای که ظاهر می شود، باید نکات مهم زیر را مشخص کنید:

  • نام پایگاه داده شما در قسمت "Name" که توسط آن وب سرور دسترسی به آن را فراهم می کند (اگر مشکلی نمی خواهید، به خط سیریلیک ننویسید).
  • وب سروری را که روی آن نصب شده است مشخص کنید این کامپیوتر(اگر دو وب سرور نصب کرده اید، در لیست کشویی یک انتخاب وجود دارد).
  • مسیر دایرکتوری انتشاراتی که وب سرور انتخابی شما باید به آن دسترسی داشته باشد.
  • و مهمتر از همه، چک باکس «انتشار رابط استاندارد OData» را علامت بزنید!

پس از کلیک بر روی دکمه "انتشار"، یک فایل default.vrd (یک فایل XML که حاوی داده هایی است که در تنظیمات انتشار ایجاد کرده اید) در مسیر مشخص شده در تنظیمات ایجاد می شود و یک ورودی در مورد انتشارات شما با همان فایل ایجاد می شود. نام به پیکربندی وب سرور آنچه شما نشان دادید اضافه می شود. پس از انتشار، وب سرور باید راه اندازی مجدد شود.

چند نکته در مورد انتشار. اگر چندین پایگاه داده برای انتشار دارید، هر کدام از آنها باید کاتالوگ خود را داشته باشند. فوراً در مورد کاربری که قرار است به پایگاه داده دسترسی پیدا کند فکر کنید - او باید نقش های لازم و نامی با حروف لاتین بدون کاراکترهای خاص داشته باشد (اگر می خواهید در آینده با رمزگذاری ها مبارزه کنید، می توانید نام را به زبان روسی با فاصله ایجاد کنید) . اگر روی ویندوز کار می کنید و UAC را فعال کرده اید، قبل از انتشار، باید پیکربندی را به عنوان مدیر اجرا کنید. اگر روی لینوکس کار می کنید - منتظر بمانید، ما به شما ایمان داریم! :)

در اینجا یک default.vrd کار با رابط OData منتشر شده به نظر می رسد:

همانطور که از فایل انتشار می بینید، وب سرور مطلقاً اهمیتی نمی دهد که پایگاه اطلاعاتی از نظر فیزیکی در کجا قرار دارد، دقیقاً به همان روشی که شما آن را در لیست پایگاه داده می نویسید پنجره اولیه. نکته اصلی این است که پسوند دسترسی روی همان رایانه با وب سرور نصب شده است و مکان پایگاه داده به طور فیزیکی از طریق شبکه به سرویس وب سرور با حقوق اصلاح قابل دسترسی است. همچنین ممکن است مشکلاتی برای دریافت مجوز وجود داشته باشد و باید فایل nethasp.ini را جستجو کنید، اما اینها همه رویه‌های استاندارد برای نصب پلتفرم معمولی هستند.

پس از انتشار و راه اندازی مجدد سرور، می توانیم نتایج را در مرورگر بررسی کنیم. برای انجام این کار، باید نام وب سرور، سپس نام پایگاه داده از انتشارات، سپس مسیر /odata/standard.odata/ را مشخص کنید. باید از شما یک رمز عبور خواسته شود و چیزی شبیه به این خواهید دید:

برای نشان دادن قابلیت‌های فناوری مورد بحث در مقاله، پیکربندی «مدیریت تجارت (پایه)»، نسخه 10.3 را انتخاب کردم که در آن حالت سازگاری روی «نسخه 8.2.13» تنظیم شده است و بنابراین تمام ابرداده‌ها بلافاصله از طریق رابط REST و فراخوانی تابع SetCompositionStandardInterfaceOData() برای کنترل در دسترس بودن ترکیب غیرفعال است.

اگر نسخه اصلاح شده ای از معاملات 10.3 دارید که حالت سازگاری آن را روی "نسخه 8.3.5" یا بالاتر تنظیم کرده اید، یا اگر پیکربندی های مدرن تری دارید، تمام ابرداده ها به طور پیش فرض پنهان می شوند و باید از ویژگی های خاص استفاده کنید. پردازش برای نشان دادن قابلیت مشاهده داده های مورد نیاز. برای اینکه زمان خود را برای ایجاد پردازش خود هدر ندهید، می توانید از کار من استفاده کنید که برای هر دو رابط معمولی و مدیریت شده مناسب است (به پیوست ها مراجعه کنید).

غرش ...

صادقانه بگویم، من واقعاً این ایده را با یک لیست فراداده سفارشی درک نکردم. نوعی راه حل نیمه دل. اگر هدف افزایش امنیت بود، پس چرا به داده‌های مجاز فوراً دسترسی کامل به ویرایش و حذف داده می‌شود و حقوق دقیق‌تری با قابلیت ارائه فقط خواندنی فراهم نمی‌شود؟ مطمئناً می توانید با استفاده از یک نقش پیکربندی شده ویژه مشکل حقوق را حل کنید ، اما این قبلاً یک تغییر غیرضروری در راه حل برنامه است و حتی در این مورد ، من به جز سرور به کسی اجازه ورود به پایگاه داده را از طریق رابط REST نمی دهم. اسکریپت های سایت من (back-end)، که تصمیم می گیرد چه چیزی را بدهم و چه چیزی را نه.

اگر آنها می خواستند مقدار اطلاعات ارسال شده را به حداقل برسانند، تصمیم مشکوک تر این است که فقط چند بار به ابرداده نگاه کنند تا عملکرد را مطالعه کنند و سپس با داده ها کار کنند. آیا انجام بهینه سازی به طور خاص در داده ها منطقی است؟ به هر حال، محدود کردن لیست فیلدهای درخواست شده از اشیا امکان پذیر است، و به ویژه مهم است که اطلاعات افشا شده را با استفاده از پارامتر $expand محدود کنیم، که کل شی مرتبط را وارد می کند، زمانی که فقط به یک یا دو فیلد از آن نیاز داریم. آن را

بعدش چی؟

فکر می کنم می توانیم به شما تبریک بگوییم - شما همه چیز را آماده کرده اید و کار می کنید! مراحل بعدی چیست؟ همه چیز بستگی به این دارد که چرا شما نیاز به سازماندهی دسترسی به پایگاه داده دارید - برای تبادل اطلاعات با یک وب سایت شرکتی، راه اندازی یک برنامه تلفن همراه، اتصال با نرم افزار شرکت ...

اگر نیاز به ایجاد چیزی مانند یک حساب کاربری در وب سایت با سابقه تسویه حساب های متقابل، قیمت های فعلی با در نظر گرفتن تخفیف های شخصی، ورود سفارش و سایر موارد دارید، ما چندین کتابخانه آماده در وب سایت رسمی در خدمت خود داریم. حتی یک چارچوب OpenUI5 کامل از SAP وجود دارد که بر اساس داده های دریافت شده از طریق پروتکل OData، به شما امکان می دهد یک برنامه تجاری کامل ایجاد کنید. به طور کلی، آزادی برای یک برنامه نویس JS شایسته.

هشدار در مورد "دوچرخه"

احتمالاً پس از خواندن آخرین عبارت، چشمان شما ممکن است روشن شود - "به جهنم مشتری وب استاندارد 1C با چنین قابلیت هایی، من رابط کاربری خود را با بانک اطلاعاتی با بلک جک و شرکت دلپذیر ایجاد خواهم کرد." اما اگر من جای شما بودم، برای رقابت در این زمینه با شرکت 1C عجله نمی کردم، جایی که توسعه دهندگان وب با تجربه چندین سال است که آنچه را که همه ما بعد از واقعیت می بینیم ایجاد می کنند. آیا واقعاً می خواهید پروژه بدنام دومینیکن را تکرار کنید؟

ممکن است سازندگان به من اعتراض کنند - ریسک ارزش تلاش را دارد و محصولاتی که تقریباً برای استفاده تجاری آماده هستند قبلاً ایجاد شده اند. کارکنان Oknosoft در اینجا اغلب دوست دارند به خود ببالند که برای سال‌های آینده صفی از مشتریان برای توسعه آنها وجود دارد. و من صمیمانه برای آنها خوشحالم - بچه ها جایگاه خود را پیدا کرده اند. اما از مقالات آنها این تصور را به دست آوردم که مجموعه metadata.js آنها شبیه به وب برنامه زمانی محبوب "برنامه های افزودنی برای رایانه های جیبی" از شرکت DISCO است که این امکان را برای برنامه نویسان معمولی 1C فراهم می کند تا برنامه های کاربردی برای تلفن های هوشمند بنویسند. و این برنامه الان کجاست؟ عملکرد مشابه برای توسعه راه حل های تلفن همراه (و حتی غنی تر، و در ادامه بیشترپلتفرم ها) خود 1C به عنوان بخشی از تحویل پلت فرم خود به صورت رایگان ارائه داد.

از تجربه شخصی. در برخی موارد، پس از اظهارات من "که این کار را نمی توان در سرویس گیرنده وب 1C انجام داد"، شرکت سابق من تصمیم گرفت تا رابط وب جایگزین خود را ایجاد کند. ما چندین توسعه‌دهنده جاوا اسکریپت را استخدام کردیم، برخی از کتابخانه‌های رابط محبوب آن زمان با شبکه‌ها و نمودارهای زیبا را به‌عنوان پایه‌ای برای front-end انتخاب کردیم، و node.js را برای سرور انتخاب کردیم. من یک رابط دسترسی به داده SOAP را برای این پروژه پیاده‌سازی کردم (سرویس‌های HTTP هنوز وجود نداشت) و ظرف چند هفته یک فرم زیبا از لیست‌های سفارش دریافت کردیم. دقیقاً نمی‌دانم در توسعه چه اتفاقی افتاد، اما پس از چندین ماه نبرد قهرمانانه در برابر حمله همه جانبه باگ‌ها، پروژه بسته شد و توسعه‌دهندگان خداحافظی کردند. اما برنامه نویسان شرکت 1C در این زمان بیکار ننشستند، بلکه تعدادی به روز رسانی را منتشر کردند که پس از آن استفاده از سرویس گیرنده وب استاندارد کمی دلپذیرتر شد.

بیایید بگوییم که ما برنامه نویس JS شایسته نیستیم، اما می خواهیم نوعی لیست را در سایت قرار دهیم. من امروز یک مقاله با لیستی از محبوب ترین کتابخانه های ایجاد جدول باز کردم و در آن یک کتابخانه ساده jsGrid فقط برای مورد ما پیدا کردم. ما وب سایت آنها را مطالعه می کنیم، کد آنها را برای استفاده از OData مثال می زنیم و مسیر داده های خود را در آنجا وارد می کنیم.

برای اینکه کاملا تنبل باشم و چیزی را برای مثال خود برنامه نویسی نکنم، باید یک جدول کامل بدون نیاز به بارگیری نمایش رشته ها از طریق پیوندها درخواست کنم. در استاندارد UT10.3 انتخاب بسیار غنی در این زمینه وجود ندارد و بنابراین من دایرکتوری Contractors را انتخاب می کنم.

حالا قسمت سرگرم کننده فرا می رسد. چگونه می توانیم یک query string برای خواندن داده های مورد نیاز خود تولید کنیم؟ آسان است! بیایید به مسیر خود به ریشه OData نگاهی بیندازیم (برای من این است) تا ببینیم چگونه این کتاب مرجع به درستی نامیده می شود - Catalog_Counterparties. سپس آدرس را در یک پنجره جدید باز کنید http://localhost/DemoTrdBase/odata/standard.odata/Catalog_Counterpartiesما محتویات کل دایرکتوری را در قالب XML خواهیم دید. اما برای مثال ما به JSON نیاز داریم و بنابراین باید یک پارامتر به خط اضافه کنیم:$format=json - کار خواهد کرد http://localhost/DemoTrdBase/odata/standard.odata/Catalog_Counterparties? $format=json . بنابراین، ما به گروه ها علاقه نداریم، بنابراین بیایید آنها را با استفاده از پارامتر فیلتر حذف کنیم:$filter=IsFolder eq false - کار خواهد کرد http://localhost/DemoTrdBase/odata/standard.odata/Catalog_Counterparties? $format=json & $filter=IsFolder eq false . همانطور که قبلاً متوجه شدید بلوک پارامترها با نماد "؟" شروع می شود و خود پارامترها با نماد "&" به یکدیگر متصل می شوند. لیست کاملبرای پارامترها و عملکردهای موجود، به مستندات پلت فرم مراجعه کنید.

ما فایل به دست آمده را در دایرکتوری قرار می دهیم که به عنوان دایرکتوری ریشه در وب سرور شما پیکربندی شده است. این لازم است تا "دامنه" صفحه و داده های درخواستی مطابقت داشته باشند، در غیر این صورت یک نشانگر به روز رسانی بی پایان و یک خطا در گزارش ها دریافت خواهید کرد: "هیچ عنوان "Access-Control-Allow-Origin" در منبع درخواستی وجود ندارد. بنابراین، منبع "تهی" اجازه دسترسی ندارد. پاسخ دارای کد وضعیت HTTP 401 بود. "


به معنای واقعی کلمه چند دقیقه از زمان صرف شده است و ما در حال حاضر یک علامت مناسب داریم، که حتی به طور خودکار در صفحات گذاشته می شود. فقط درخواست احراز هویت کمی ناجور به نظر می رسد و برای اینکه هر بار لاگین و رمز عبور را وارد نکنم، آنها را دقیقاً در خط دسترسی نوشتم. فایل نهایی کاملاً ساده بود و هر کسی می‌تواند به راحتی آن را تکرار کند، اما در هر صورت، آن را در پیوست‌ها نیز قرار خواهم داد.

و اصلا بدون برنامه نویسی؟

وب سایت ها، اپلیکیشن های موبایل، اتوبوس پیام و کلمات دیگر برای هر متخصص فناوری اطلاعات جالب به نظر می رسد ، اما در دل روسای عالی رتبه پاسخی نمی یابد. ابزار کار اصلی آنها اکسل است که با عشق غیرمنطقی حتی با یک زیرسیستم گزارش دهی قدرتمند از پایگاه داده 1C خود رایت می کنند. و در این لحظه به یاد می آوریم که این مایکروسافت بود که استاندارد OData را ارائه کرد و آن را با شروع آفیس 2010 در برنامه های خود پیاده سازی کرد. برنامه های اداریما می توانیم به سادگی جداول را با داده مشاهده کنیم یا از موتورهای پرس و جو برای به دست آوردن اطلاعات جالب تر در یک زمان بدون نیاز به اتصال جداول از صفحات مختلف استفاده کنیم.

مثلا ما به بدهکاران علاقه مندیم. در UT10 می‌توانیم آن‌ها را از جدول مجازی موجودی‌های ثبت انباشت دریافت کنیم. تسویه حساب متقابل با طرف مقابل، با استفاده از فیلتری به گونه‌ای که مبلغ بدهی بزرگتر از صفر باشد (در غیر این صورت اینها پیش پرداخت هستند). من تاریخ را تعیین نمی کنم، زیرا به داده های فعلی علاقه مند هستم. برای پایگاه داده من لینک زیر خواهد بود: http://localhost/DemoTrdBase/odata/standard.odata/AccumulationRegister_تسویه حساب متقابل با طرف مقابل/Balance?$filter=AmountBalance gt 0

با نگاهی به نتیجه، می‌توانیم متوجه شویم که نماهایی برای طرف مقابل نداریم، بلکه فقط کلیدهایی برای جدول دایرکتوری طرف مقابل داریم. بنابراین، ما نیز این داده کمکی را درخواست خواهیم کرد. برای این کار از لینک بدون فیلتر استفاده کنید: http://localhost/DemoTrdBase/odata/standard.odata/Catalog_Counterparties

و اکنون یک توالی ساده از مراحل:

  1. اکسل را باز کنید (من نسخه 2016 دارم؛ اگر 2010 یا 2013 دارید، ممکن است منو کمی متفاوت باشد)
  2. ما مسیر ناوبری را دنبال می کنیم: "داده" / "ایجاد درخواست" / "از سایر منابع" / "از کانال ODATA".
  3. ما پیوند خود را با ثبت تسویه حساب های متقابل نشان می دهیم
  4. در فرم مجوز، گزینه سوم "Basic" را انتخاب کنید و ورود / رمز عبور خود را مشخص کنید. روی "اتصال" کلیک کنید.
  5. در پنجره ویرایشگر درخواست که باز می شود، به جای نام "Request1" چیز جالب تری به ما خواهیم داد - "تسویه حساب متقابل"
  6. در مرکز پنجره ویرایشگر پرس و جو، ستون "List" را می بینیم که در هر خط عبارت "Record" وجود دارد. می‌توانیم از دستور متن «To Table» استفاده کنیم یا روی دکمه مربوطه در منوی «Transform» ویرایشگر کلیک کنیم. به سوالی که پیش می آید به "OK" پاسخ دهید.
  7. اکنون ستون "Column1" نامیده می شود و در کنار آن دکمه ای با فلش هایی در جهت های مختلف وجود دارد. روی آن کلیک کنید. شرح ستون های موجود از سرور برداشته می شود. علامت تمام چک باکس ها را بردارید و آنها را فقط در ستون های "Account_Key" و "AmountBalance" بگذارید. روی "Ok" کلیک کنید و جدولی متشکل از دو ستون انتخاب شده با داده های مورد نیاز ما ظاهر می شود.
  8. ابعادی مانند سازمان، قرارداد و معامله خارج از توجه ما بود، اما همچنان درخواست می شد. در نتیجه اکنون خطوط طرف مقابل با مبالغ متفاوت داریم. آنها را می توان با استفاده از گروه بندی جمع کرد. برای انجام این کار، یا از منو یا از زمینه، دستور "Group by" را فراخوانی کنید. در قسمت های گروه بندی فقط طرف مقابل را رها کنید و فیلد را با مقدار حذف کنید. نام ستون جدید را "بدهی" بگذارید، "مبلغ" را در عملیات انتخاب کنید و در ستون فیلد مبلغ ما را مشخص کنید. روی "Ok" کلیک کنید و در نتیجه رکوردهای کمی کمتر خواهیم داشت.
  9. اکنون باید طرف مقابل را رمزگشایی کنیم. برای انجام این کار، در پانل سمت چپ "پرس و جوها"، جایی که قبلاً درخواست فعلی "تسویه حساب متقابل" وجود دارد، تماس بگیرید منوی زمینهو New Query / Other Sources / ODATA Feed را انتخاب کنید. در پنجره ای که ظاهر می شود، مسیر دایرکتوری طرف مقابل را مشخص کنید. سپس، مجدداً ورود/گذرواژه مجوز را مشخص کنید، در پیش‌نمایش روی «تأیید» کلیک کنید و به درخواست جدید نام «طرفداران» بدهید.
  10. بیایید به درخواست "تسویه حساب های متقابل" برگردیم (روی نام در پانل درخواست کلیک کنید).
  11. اکنون دو پرس و جو خود را به هم وصل می کنیم. برای انجام این کار، در منوی اصلی ویرایشگر، دستور "Combine" / "Combine Queries" را فراخوانی کنید. در پنجره طراح اتحادیه جدول تسویه حساب های متقابل ما وجود خواهد داشت. در مرکز، در پنجره کشویی، درخواست "Counterparties" را انتخاب کنید. نوع اتصال پیش‌فرض باقی می‌ماند (خارجی سمت چپ). سپس، برای انتخاب ستون‌های شرایط ادغام، کلیک کنید. ما با هر چیزی که بیشتر به ما پیشنهاد می شود موافقیم.
  12. پس از ادغام، یک ستون جدید "Counterparties" با یک دکمه آشنا با فلش های چند جهته دریافت کردیم. روی این دکمه کلیک کنید و ستون های مورد علاقه ما را انتخاب کنید. برای سرگرمی، "NameFull" و "Parent" (گروه) را انتخاب کنید. ستون "والد" نیز از ما دعوت می کند تا باز شود - فیلد "توضیحات" را در آن انتخاب کنید (نام معمول دایرکتوری).
  13. بیایید آن را به زیبایی انجام دهیم. می توانیم ستون اول را با کلید طرف مقابل حذف کنیم. بیایید ستون گروه را "گروه" بنامیم، به ستونی که نام طرف مقابل دارد، نام "طرفداران" بدهیم و ستون بدهی را به انتهای جدول حاصل منتقل کنیم.
  14. حالا می توانیم روی آن کلیک کنیم دکمه اصلیویرایشگر - "بستن و بارگیری".
  15. سپس می توانید از جدول بارگذاری شده به عنوان داده برای یک PivotTable یا PivotChart استفاده کنید. یا، هنگام ایجاد این اشیاء جدید، درخواست "تسویه متقابل" خود را به عنوان منبع داده مشخص می کنیم.

اما همانطور که می گویند یک بار دیدن بهتر از صد بار شنیدن است.سعی کردم همان توالی اقدامات را روی ویدیو ضبط کنم. و من بلافاصله به شما هشدار می دهم که وقتی آن را تکرار کنید کمی متفاوت خواهد بود - همانطور که در بالا ذکر کردم مجوز درخواست می شود. فقط در زمان ضبط ویدیو، اکسل قبلاً لاگین و رمز عبور من را به خاطر آورده بود.

نتایج

امیدوارم مقاله من مفید بوده باشد. من وجود و فواید را گزارش کرده ام تکنولوژی جدیدپلت فرم ها او همچنین تنظیمات دسترسی را به تفصیل توضیح داد پایگاه اطلاع رسانیبا استفاده از پروتکل OData و چندین مثال از استفاده عملی ارائه کرد.

به طوری که هیچ پیش داوری وجود ندارد که دسترسی از طریق OData فقط برای آن قابل استفاده است رابط مدیریت شدهدر آخرین نسخه هاپلتفرم، پایه پیکربندی آزمایشی "مدیریت تجارت (پایه)، rev 10.3" را در حالت سازگاری 8.2 به عنوان مثال آموزشی انتخاب کردم. حتی در پایگاه داده ای با چنین پیکربندی، تنها با چند کلیک ماوس می توانید داده های به روز بدهی ها را در یک کتاب کار اکسل دریافت کنید، و به همین ترتیب می توانید به راحتی مانده های انبار، داده های فروش به روز را دریافت کنید. و اطلاعات مفید دیگر

P.S.ادامه این مقاله که به عملیات ایجاد و تغییر داده می پردازد در سایت منتشر شده است

در 1C: Enterprise، با شروع از نسخه 8.3.5، پلت فرم می تواند به طور خودکار یک رابط REST برای کل پیکربندی ایجاد کند. این با استفاده از پروتکل OData کار می کند و به شما امکان می دهد از طریق یک وب سرور با دایرکتوری ها، اسناد و ثبت نام ها کار کنید. به طور کلی، سرعت دریافت داده ها چندین مرتبه سریعتر از COM یا فایل ها است که خبر خوبی است.

پرس و جوهای مختلف برای عملیات های مختلف استفاده می شود:

  • GET - برای دریافت داده استفاده می شود.
  • POST - برای ایجاد اشیاء استفاده می شود.
  • PATCH - اصلاح یک شی موجود.
  • DELETE - حذف یک شی.

پیشوندها برای دسترسی به اشیاء مختلف استفاده می شوند:

  • پیشوند نام
  • دایرکتوری - کاتالوگ;
  • سند - سند;
  • مجله اسناد - DocumentJournal;
  • ثابت - ثابت;
  • طرح تبادل - ExchangePlan;
  • نمودار حساب - ChartOfAccounts
  • نمودار انواع محاسبات - ChartOfCalculationTypes;
  • نمودار انواع مشخصه - ChartOfCharacteristicTypes;
  • ثبت اطلاعات - InformationRegister;
  • Accumulation Register - AccumulationRegister;
  • ثبت محاسبه - CalculationRegister;
  • ثبت حسابداری - AccountingRegister;
  • فرآیند کسب و کار - BusinessProcess;

با استفاده از پروتکل ODATA، می توانید از روش های داخلی اشیاء در هنگام انجام درخواست های POST نیز استفاده کنید.

  • برای یک سند – Post() و Unpost();
  • برای یک کار – ExecuteTask();
  • برای یک فرآیند تجاری – Start();
  • برای ثبت اطلاعات – SliceLast() و SliceFirst();
  • برای ثبت انباشت و ثبت حسابداری – Balance()، Turnovers() و BalanceAndTurnovers();
  • برای ثبت محاسبات - ScheduleData()، ActualActionPeriod()،<ИмяПерерасчета>() و پایه<Имя базового регистра расчета>().

برای شروع کار با این رابط، باید آن را منتشر کنید. این کار از طریق منوی پیکربندی "Administration" - "Publish on a web server" انجام می شود، کادر انتخاب "Publish standard OData interface" را علامت بزنید و روی "Publish" کلیک کنید.

پس از انتشار، پروتکل را می توان در http:// بررسی کرد<ИмяСервера>/<ИмяБазы>/odata/standard.odata. در پاسخ باید کل ترکیب جداول منتشر شده را دریافت کنیم. باید شبیه تصویر زیر باشد.


اگر پس از انتشار رابط REST، ترکیب داده های منتشر شده خالی است، باید از Set Contents از متد Standard OData Interface استفاده کنید. در ورودی دارای 1 پارامتر از نوع "آرایه" است. باید متادیتا را که باید منتشر شود به آرایه اضافه کنید.

ترکیب = آرایه جدید.
Composition.Add(Metadata.Directories.Counterparties);
SetCompositionofStandardInterfaceOData(Composition);

http://<ИмяСервера>/<ИмяБазы><ИмяСправочника>

هنگام درخواست، می توانید از پارامترهای زیر استفاده کنید:

انتخاب کنید - در این پارامتر فیلدهایی را که نیاز داریم نشان می دهیم.

فرمت – قالبی را که می خواهیم پاسخ را دریافت کنیم (XML یا JSON)، XML پیش فرض را تنظیم کنید

odata - اگر در پاسخ نیازی به توضیحات ابرداده نداریم، بنویسید "odata=nometadata"

فیلتر - در اینجا ما انتخاب ها را نشان می دهیم.

همانطور که در بالا نوشتم، ما می توانیم پاسخ را در دو مورد دریافت کنیم فرمت های XMLیا JSON، پیش فرض XML است. برای دریافت داده ها با فرمت JSON باید آدرس URL"?$format=application/json" را اضافه کنید.

http://<ИмяСервера>/<ИмяБазы>/odata/standard.odata/Catalog_<ИмяСправочника>?$format=application/json

اساساً ما باید یک عنصر دایرکتوری خاص و نه همه ورودی های آن را دریافت کنیم. برای این کار از کلمه جادویی استفاده می کنیم "فیلتر".

http://<ИмяСервера>/<ИмяБазы>/odata/standard.odata/Catalog_<ИмяСправочника>?$format=application/json&$filter=Ref_Key eq guid'UID'

اگر متوجه شدید، URL حاوی دو پارامتر $format و $filter است، آنها می توانند به هر ترتیبی قرار بگیرند، نکته اصلی این است که یک علامت "" در جلوی پارامتر اول وجود دارد. ? "، و قبل از دوم" & ". منطق اینجا این است: ما آدرس دایرکتوری را در قسمت اول و پارامترها را در قسمت دوم نشان می دهیم. این قسمت ها با علامت «از هم جدا می شوند. ? "، اما خود پارامترها با علامت" از هم جدا می شوند. & ". اگر آن را به صورت شماتیک به تصویر بکشید، به نظر می رسد

جدول آدرس ? $Parameter1=Parameter1Value & $Parameter2=Parameter2Value

توانایی تولید خودکار یک رابط REST OData برای کل راه حل برنامه اجرا شد. بنابراین، ما توانستیم دسترسی کامل را فراهم کنیم برنامه شخص ثالثتنها با چند کلیک به پایگاه داده 1C.

این مکانیسمطراحی شده برای حل چندین مشکل رایج:

  • آپلود/دانلود داده ها به/از یک راه حل کاربردی؛
  • ادغام با وب سایت ها (فروشگاه های آنلاین)؛
  • افزایش عملکرد راه حل برنامه بدون تغییر پیکربندی؛
  • ادغام با سایر سیستم های شرکتی (گاهی اوقات بدون برنامه نویسی اضافی).

رابط OData REST را می توان برای تبادل داده بین پایگاه های داده 1C استفاده کرد، اما از آنجایی که مکانیسم های راحت تر دیگری برای این کار وجود دارد، هدف اصلی رابط OData REST در یکپارچه سازی با سیستم های شخص ثالث دیده می شود.

و این واقعا راحت است، با توجه به اینکه کلاینت های OData در تمام پلتفرم های اصلی وجود دارند، کتابخانه های مربوطه را می توان دانلود کرد.

در این مقاله سعی خواهم کرد به طور مفصل در مورد اینکه رابط OData REST چیست و چگونه می توان از آن استفاده کرد صحبت کنم.

انتشار یک رابط REST OData

برای استفاده از رابط OData، باید منتشر شود، و برای این ما به یک وب سرور نیاز داریم - Apache 2.2 یا IIS (شروع از نسخه همچنین Apache 2.4). سپس، باید به منوی "Administration" -> "Publish on a web server..." بروید.

در پنجره ای که باز می شود، فیلدهای مورد نیاز را پر کرده و روی «انتشار» کلیک کنید:

پس از این، شما باید ترکیب رابط OData را تعیین کنید، یعنی. نشان می دهد که کدام اشیاء پیکربندی در آن گنجانده شده است و کدامیک نیست (در ابتدا شامل یک شی واحد نیست).

شما می توانید این کار را مانند این انجام دهید:

رویه &روی سرور SetODataOnServer() tArray = آرایه جدید;

tArray.Add(Metadata.Directories.Products);

SetComposition ofStandardInterfaceOData(tArray); پایان رویه

&روی سرور

رویه SetODataOnServer()

tArray= آرایه جدید;

tArray. افزودن(فراداده. فهرست راهنماها. محصولات) ;