1Cへの外部影響:エンタープライズWebクライアント
説明した方法を使用すると、htmlとJavaScriptを使用してコンテナを整理し、1C Webクライアントをそこに配置できます。 このコンテナでは、アルゴリズムレベルとスタイル管理レベルの両方でWebクライアント管理を利用できます。 このアプローチは、1Cバージョン8.2.18.96で開発されました。
Webサーバー側の構成
各1C Webクライアントは、Webサーバーで公開されている情報ベースと連携します。 より完全な統合を行うには、Webクライアントが埋め込まれるコンテナを同じサーバー上に作成する必要があります。 これにより、クロスドメインコールに関連するセキュリティの問題が回避されます。 たとえば、SilverlightおよびFlashは、xmlファイル形式の対応するポリシーが構成されていない場合、他のサイトのコンテンツへのアクセスを許可しません。 クロスドメインの投稿リクエストも難しい場合があります。
Apache設定はconf / httpd.confに保存されます

パスの値を変更する必要があります。 以下はパスc:/Apache.wwwの値です-1Cインフォベースへのリンクを保存します。
DocumentRoot "C:/Apache.www" <Directory "C:/Apache.www">
プリセット
すべてのブラウザケースのスタイルが登録されている既製のテンプレートでHtmlファイルプロジェクトを開始することをお勧めします。 非常にまともなテンプレートは、 html5boilerplate.comにあります。
Webブラウザーの構成時に指定されたドキュメントのルートディレクトリに配置する必要があります。 index.htmlファイルがホームページを担当するようになりました。編集する必要があります。
念のため、ブラウザの互換モードを設定します-最新のものとの互換性:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
使用されるテンプレートはjQueryで機能します。
1C Webクライアントの起動は、index.html内のIFrameで行われます。 最初のボタンは1Cアプリを起動し、2番目はNetBridgeアプリケーションを起動します。
<div id="container"> <button id="appButton"> 1</button> <button id="netBridgeButton"> 2</button> <iframe id="iframe"/> </div>
ボタンクリックハンドラは次のようになります。
$(document).ready(function () { $("#appButton").click(function () { $("#iframe").attr("src", "App/ru_RU/?N="); }); $("#netBridgeButton").click(function () { $("#iframe").attr("src", "NetBridge/ru_RU/?N="); }); ...
この時点で、Webクライアントの起動オプションを操作できます。 たとえば、ユーザー名(N =管理者)とパスワードを渡します。
Webクライアントイベント応答
キャッチする必要がある最初のイベントは、1C Webクライアントがロードされ、使用する準備ができたときのイベントです。
IFrameは、サブスクライブできるonloadイベントを実装します。 問題は、Webクライアントに対してonloadを最大3回呼び出すことができることです。 このような呼び出しはリダイレクトに関連付けられます。たとえば、1C Webクライアントはユーザーの言語を考慮してWebクライアントをリダイレクトします。 onloadの最後の呼び出しが、WebクライアントのWebUIオブジェクトの外観に関連付けられていることを実験的に確認することができました。 しかし、1Cを初期化するプロセスはここでは終わりません。 この段階では、必要なライブラリはロードされず、メインフォームインターフェイスは作成されません。 メインインターフェイスを作成する兆候として、初期化された変数がtrueになった瞬間をとることができます。
1C Webクライアントの変数には、次の構造を介してアクセスできます。
cw = $("#iframe").get(0).contentWindow;
ハンドラーは次のようになります。
$(document).ready(function () { ... $('#iframe').load(function () { // . ru_RU, if ("WebUI" in $("#iframe").get(0).contentWindow) { var cw = $("#iframe").get(0).contentWindow; setTimeout(function () { desktopLoadedComplete(); }, 50); } }); });
イベントチェーンの結果として、desktopLoadedComplete関数が呼び出されます。
desktopLoadedComplete = function () { var cw = $("#iframe").get(0).contentWindow; if ($("#iframe").get(0).contentWindow.Web.Application.initialized) { //alert(cw.Web.Common.Version); themes = cw.winManager.controls["themes"]; themes.setListener(handleEvents); $('span.themeLink', $("#iframe").contents()).css('text-decoration', 'line-through'); } else { setTimeout(function () { desktopLoadedComplete(); }, 50); } }
desktopLoadedComplelteでは、フォーム1Cで作業できます。 たとえば、パーティションを選択するための文字を取り消し線で囲みます。 jQueryコンストラクトはこれに適しています。
$('span.themeLink', $("#iframe").contents()).css('text-decoration', 'line-through');

タイプがWebUI.ThemesPanelのwinManager.controls ["themes"]オブジェクトは、パーティションウィンドウを担当します。 このタイプはWebUI.NavigationControlを継承し、WebUI.NavigationControlはWebUI.ControlおよびWeb.Events.EventsBaseを継承します。
経験的にセクション切り替えイベントに接続することができました。 次のようになります。
themes = cw.winManager.controls["themes"]; themes.setListener(handleEvents);
handleEventsイベントハンドラーは、いくつかのパラメーターを受け取ります。そのうちのパラメーターは、イベントのソースとイベントコードです。 パーティションの切り替えを分析するには、ハンドラーは次のようになります。
handleEvents = function (sender, eventId, data0) { var cw = $("#iframe").get(0).contentWindow; if (eventId == cw.Web.Events.UIThemeButtonClickedEvent) { alert("eventId = Web.Events.UIThemeButtonClickedEvent"); cw.winManager.handleEvents(sender, eventId, data0); } }
セクションが切り替えられると、ダイアログボックスが呼び出され、制御がネイティブ1Cイベントハンドラーに転送されます。
結論
Html、JavaScript、jQueryは、外部から1C Webクライアントを管理するための強力なツールを提供します。 パラメータの転送(ログイン、パスワード)、デザインとスタイルの管理、イベントサブスクリプションが利用可能です。 1C Webクライアントには、処理に長い時間がかかる強力なフレームワークが含まれています。
この記事では、サーバーおよびクライアントのプロシージャを呼び出す操作については説明しませんが、理論的にはそのような可能性があります。
この記事は、提案されたテクノロジーなしでWebクライアントでHTMLフィールドを使用する場合にも興味深いものです。 この場合、1Cインフラストラクチャ全体が親ウィンドウからも利用できるためです。 理論的には、このコンテキストでサーバープロシージャを呼び出す場合、ユーザーのhtmlコードとネイティブ1Cコントロール間の相互作用を整理できます。 このオプションは、WebBrowser Controlを使用する代わりに使用できます。つまり、Windowsから切り離します。
Webサイトのソースコード: web-site.zip(86.88 kb)