ホーム   フォーラム   FAQ
 
メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

コンテキストID

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
depth:
0
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 .5 .6 .7 .8 .9 .10 | 投稿日時 2012-3-9 0:21
nkmt  長老   投稿数: 1668
1.9gの開発環境だとコンテキストIDの取得で
26053555595165124 といった数字を取得出来るのですが

1.9g2の実行環境だと
コンテキストID が
1 となってしまいます。

開発環境は Win7 Pro 32ビットや
Vista Businessの32ビットです。

実行環境はWin2008サーバーR2 64ビットです。
投票数:0 平均点:0.00
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012-3-9 0:42 | 最終変更
nkmt  長老   投稿数: 1668
自己レスです。
ヘルプに以下の記載がありました。

> この関数がプログラムの[タスク前]で使用された場合、
> [コンテキストID]特性内に値が返りません。

私の使い方誤りのようです。

追記)
でもプログラムによってはタスク前から
コンテキストIDの取得に成功している物も
あるんですけどね。
投票数:0 平均点:0.00
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012-6-8 13:15
nkmt  長老   投稿数: 1668
1.9g2の実行環境で、以前投稿したのとは別の環境で・・・。

同じアプリなんですが
CtxSetName('売上伝票入力')
CtxSetName('商品群マスタメンテ')

前者はコンテキストIDの取得が可能なんですが、
後者だと1が帰ってきます。

1.9gの開発環境では、どちらも問題無いのですが。
投票数:0 平均点:0.00
depth:
2
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012-6-8 13:19 | 最終変更
nkmt  長老   投稿数: 1668
違いと言えば CtxSetName('売上伝票入力') の方は
並行実行で動かしています。

CtxSetName('商品群マスタメンテ') の方は
並行実行ではありません。

CtxSetName('商品群マスタメンテ') を
CtxSetName('MSTMNTSHOUHINGUN') に変えても
コンテキストIDは 1 しか帰ってこないです。
投票数:0 平均点:0.00
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012-6-8 14:33
nkmt  長老   投稿数: 1668
1.9gで開発し、ecfファイルを作成しています。

実行環境は1.9g2です。

ecfは、両者で互換はあるようです。
投票数:0 平均点:0.00
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012-6-11 12:07
nobukoshi802  一人前   投稿数: 118
コンテキストIDを利用したいのは、
実行環境で、ユニーク番号を取得する方法と思います。

実行環境で、ユニーク番号を取得する方法として
MS-SQLを利用しているなら、グローバルテンポラリーテーブルを
利用すると便利です。
ログイン毎に、番号を設定します。
グローバルテンポラリーなので、セッションが切れれば
レコードが消えるので、リッチ接続判定にも利用出来ます。
投票数:0 平均点:0.00
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012-6-11 13:05
nkmt  長老   投稿数: 1668
レス有難うございます。
グローバルテンポラリーテーブルって知らないのでネットで調べてみます!
投票数:0 平均点:0.00
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012-6-11 13:11
nkmt  長老   投稿数: 1668
dbMAGIC V8の頃は、端末番号でユニークでしたが、V1 Plusでは並行実行もあるのでコンテキストIDを使いたかったのですが。

使い方間違いなのか何なのか。

日付+時刻+端末番号でユニーク化は実質可能そうですけどね。

1206121311777とか・・・

このやり方だとユニーク番号を生成する独自関数や
各PGにそれを格納する変数などが必要になりますね。

もう1度コンテキストIDの使い方に間違いがないか確認してみます。
投票数:0 平均点:0.00
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012-6-11 15:43
null  長老   投稿数: 191
コンテキストID が 1 になったとのことですが、
どのようにして、コンテキストID を確認しているんでしょうか?

ほぼ同じようにしても再現しないので、判らないのですが、
コンテキストID の取得方法とかに何かヒントがあれば
再現する人もいるかもと思いまして。
投票数:0 平均点:0.00
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012-6-11 15:54 | 最終変更
nkmt  長老   投稿数: 1668
オンラインタスクのタスク前処理で
CtxSetName('MSTMNTSHOUHINGUN')

その直後に
エラー 警告 Str(CtxGetId('MSTMNTSHOUHINGUN'),'18')

実行すると 490689527550952190 が表示されます。
(開発版で試しました。)

とここまで書いて、あらためてヘルプを見て
初めて気付いたのですが、これって
アプリケーションサーバー関数ってなってるので
普通のクラサバでは使っちゃ駄目なんでしょうね...!?
(きっとそうなんでしょうね。)
投票数:0 平均点:0.00
depth:
2
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012-6-11 16:59
null  長老   投稿数: 191
1.9g では OK で 1.9g2 だと駄目ということだと勘違いしていました。
(1.9g2 の) 実行環境だと 1 が返るということですね。
名称付けるの面倒だったので、CtxGetID('') でも再現しました。
ちなみに、1.8c でも同じ結果になるのでそう言うものなんだと思います。

> 普通のクラサバでは使っちゃ駄目なんでしょうね?
恐らくそうだと思います。
結果が 1 になるのは謎ですが、クラサバってことは ecf が実行されるのは
個々のクライアントPC 上になるはずなので、仮に取得出来ても必ず一意にならないと言えます。

私も今まで正しい値が帰ってくるもんだと勘違いしていましたが、
クラサバの場合は別の方法を取るしかない気がしてきました。
IP とか MAC に並列実行考慮の連番みたいな感じに。
投票数:0 平均点:0.00
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012-6-11 17:13
nkmt  長老   投稿数: 1668
nullさん、レス有難うございます。

マスタや伝票などの排他制御をプログラムレベルで行わないと
いけない場面がいくつかありましたので...。

マスタの○番は誰がいつから捕まえてます、
という情報を作ったり、削除したりしているので、
コンテキストIDみたいなものが1発で使えて便利だと
思ったのですが、単なる使い方間違いとはお笑い物ですが、
はっきりして良かったです。別な方法を考えます。
投票数:0 平均点:0.00
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012-6-11 20:12
nobukoshi802  一人前   投稿数: 118
MAGICからグローバルテンポラリーテーブルを利用する場合
ファイル辞書のテーブル名の頭に、##を付けるだけです。

予備知識として、テンポラリーテーブルは
テーブル名の頭に# だけです。

投票数:0 平均点:0.00

  条件検索へ


Copyright (C) Magic Software Japan K.K. All Rights Reserved.
個人情報保護方針 会員規約