goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

SugarCRM内で、SQLを発行するには

2007-09-28 15:14:55 | SugarCRM

きのう、SugarCRMは、SugarBeanから継承しなければ好きなSQLでグラフや表がかけると書いたけど、じゃあ、そのindex.php内で、SugarCRMで使っているテーブルにアクセスするには?というのを書かなかったので、今回はその話。




■DBアクセスのためのSQL発行

 まあ、MySQLをPHPでconnectして、そこからSQLを発行してもいいんだけど。。。

 SugarCRMのほうで、グローバル変数$dbの中に、データベースのオブジェクトが入っている。なので、$db->query("発行したいSQL");でOK。

 たとえば、Account(取引先)テーブルの中にあるデータをアクセスし、idとnameを表示したいなら、こんなかんじ。
global $db;
$result = $db->query("SELECT * FROM accounts;");
while(($row=$db->fetchByAssoc($result)) != null)
{
	print($row['id'] . "<BR>");
	print($row['name'] . "<BR>");
}

(上記 < > ¥は、本当は半角)

これをindex.phpにかけば、表示される。




■現在ログインユーザーについて

 だれだれさんの場合には見せるけど、だれだれさんの場合には見せないといった、現在使っているユーザーのログインユーザー名を知りたい場合があるかもしれない。

 ログインユーザーは、グローバル変数 $current_userに入っていて、
    $current_user->idにユーザーID、
    $current_user->user_nameにログインユーザー名
 というふうになっているみたいです。

 もっといろんなデータが、$current_userにはいっているので、もししりたければ、
 print_r($current_user);でみてくださいませ。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

SugarCRMは、SugarBeanから継承しなければ好きなSQLでグラフや表がかける

2007-09-27 19:01:15 | SugarCRM

 (コミュニティ版の)SugarCRMは、フリーのCRMソフトといわれる。
 しかし、CRMを行うには分析が必要だが、SugarCRMにおいては、分析のグラフはダッシュボードに書かれているグラフを拡張するしかなく、各種の検索をした表や、もっと自由な図を書く方法が、示されていない。

 一般の入力データの拡張は、SugarBeanを継承するモジュールを作成することによってできる。その作成方法は、たとえば、実践!オープンソースCRMアプリケーション入門に書かれているが、そのような、本来CRMが持つべき機能である、図表の拡張方法には、一切かかれていない。


 で、実は、これは、SugarBeanを継承しないことによって実現できる。
 (グラフについては、ダッシュボードでのグラフについて以前説明したが、
  それ以外の方法として、継承しないことで実現できる)

 カレンダーなどが、このSugarBeanを継承しないで作成されたものなのだが、ほとんど自由にPHPがかけ、SQLが発行できる。以下、その方法について説明する。




■必要なファイル

SugarCRMを継承しない場合必要なファイルは、以下のとおりである

・モジュール名のフォルダのした
   モジュール名.php
   Forms.php
   index.php
   Menu.php
   languageフォルダ
      en_us.help.index.html
      en_us.lang.php
      ja.lang.php

・applicationフォルダの下
   英語用mod_app_strings.php
   日本語用mod_app_strings.php
  (英語用と日本語用で名前をかえる)

・manifest.php

こいつをまとめて1つのフォルダに入れて、ZIPで固めて、モジュールローダーに読み込ませればOK。

 で、具体的中身




■中身
・モジュール名.php
 クラスのところで、

  class モジュール名 {

 として、Beanを継承しない。
 そのほか、コンストラクタは作成し、$module_dir、$table_name、 $object_name位は宣言しよう(カレンダーを参考に)

・index.php
 ここに、好きなことを、好きなように書く。

・Forms.php
 ファイルが無いとエラーになるが、実質空でもOK?

・Menu.php
 メニューを書く。現在動いているモジュールのメニューを参考にしてください。
 (左側のメニューに何もいらなければ書かなくても動く)


・languageフォルダ
 en_us.help.index.htmlは、てきとーに書いておく。en_us.lang.php,ja.lang.phpは、他のものと同じ。LBL_MODULE_NAME、LBL_MODULE_TITLEは、まあ、必要かな(^^;)

・applicationフォルダ
 SugarBeanを継承した場合と同じ。タブの部分を書く。

・manifest.php
 SugarBeanを継承した場合と同じ。インストールについて書く。




要するに、継承しない場合、index.phpに書きたいことをじゃんじゃん書けばOK。このとき、editView.php,ListView.php,DetailView.phpはかかなくてもOKってこと。
 imageは使いたければ、追加してください。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

SugarCRMで、自分で作ったグラフを出す(その2)

2007-09-19 15:25:55 | SugarCRM

前に書いた、SugarCRMでグラフ表示をかえたり、自分で作ったグラフを出すのつづきです。

 前回の話をまとめると、modules/Charts/codeに、各種のグラフがあるので、既存のものをコピーして、そのモジュール用にファイル名、クラス名、コンストラクタ名を修正して、さらにpredefined_charts.phpを修正。

 そうすると、コピー元のグラフと同じグラフが出ます。

 で、自分が作ったグラフを表示するためには、gen_xmlを修正するというところまでは書きました。

 問題は、そのgen_xmlの修正の仕方!。きょうは、そこ。




■グラフ作成のための引数の設定

 グラフを作成するためには、いろいろな変数を設定しないといけませんけど、それは、EDITをクリックすると、変数設定画面が出てきて、設定できます。

 で、この変数設定画面は、どこで作っているかなのですが、前回コピーして作った、モジュール用ファイル(modules/Charts/codeの下につくった)をひらいてもらうと、

function draw($extra_tools)

っていう関数があるとおもいます。その中にある、

<div id='pbls_edit' style='display: none;'>

</div>

(< >は、本当は半角。以下同じ)

 の部分(具体的には、その中のFormですけど)が、その変数設定画面にあたります。普段はdisplay: noneなので、表示されないのですが、EDITボタンを押されると、表示されます。

 なので、そこに、好き勝手にフォームをつくって、変数を設定してくださいませ。




■グラフ作成のための引数の受け取り

 上記のフォームに書いた変数を受け取る方法ですが、Formは、index.phpとかに飛ぶとか指定してありますけれど、ぐるぐる回って、結局はまた、

function draw($extra_tools)

に帰ってきます。ここで、

$_REQUEST["Formで設定したname"];

の値を取得すれば、OKです。もちろん、drawメソッドは、EDITで値設定したとき以外でも、入ってきます。しかしこのときには、$_REQUEST["Formで設定したname"]にはセットされません。そこで、$_REQUEST["Formで設定したname"]に値が設定されない場合には、デフォルトの値なり、すでに設定されている値なり、前回設定された値を利用し、$_REQUEST["Formで設定したname"]に、値がセットされていたら、その値を使うというようにすればいいです。




■グラフ作成のための引数をgen_xml

 そして、上記で取得した値をgen_xmlのメソッドに渡します。
 gen_xmlは、draw関数の下のほうで、

echo "<p align='center'>".$this->gen_xml(

という形で、gen_xmlを呼び出していますので、渡したい引数を、そのあとに書きます。

 当然、それに伴って、下のほうにある、メソッド

function gen_xml(

 の引数もあわせてください。




■gen_xmlかきだし

 ということで、引数も受け取ったので、あとは、好き勝手に、検索して、グラフを書いてください。

 なお、最後に、create_chartを呼び出しています。

 このメソッドは、SugarCRMのホームの下、include/charts/Charts.phpの中に、あるんですけど、やってることは結局、OBJECT タグを書き出して、Flashを使えるようにして、swfファイルを呼び出しているだけなので、もし、include/charts/の下に用意しているFlashを使わず、自分でグラフを作るような場合は、このメソッドを呼ばず、echoで、書きたいグラフを出力していくことになるでしょうし、このメソッドを使って、自分でFlashのグラフ部品を作って、それをcreate_chartの引数に指定してもOK(その場合のXMLファイルは、独自レイアウトになるだろうけど)っていう話になります。




ってかんじですかね。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

SugarCRMでグラフ表示をかえたり、自分で作ったグラフを出す

2007-09-14 14:19:20 | SugarCRM

まだ、わかんないこと多いけど、とりあえず、ここまでのことを忘れないためのメモ




■既存のグラフのパラメータを変える

 SugarCRMでグラフは、ダッシュボードに表示される(ダッシュボードを選択すると、4つのグラフが出る)。

 この表示しているグラフの対象期間やステージなどを変えたい場合は、グラフ右上のeditのところをクリックすれば、変更できる。

 グラフ表示の順番をかえるときは、右上の↑↓で、上下する

 表示したくないときは、Xをクリックすると、表示せず、上のAdd a Chartのコンボボックスにグラフ名が追加されて、画面上からは表示されなくなる
 それを再表示させたいところは、そのコンボボックスから、そのグラフを選択する。




■新規に自分が作ったグラフを追加、表示させる。

英語だけど、
How to create new chart?
http://www.sugarcrm.com/forums/showthread.php?t=11286t

がとても、参考になる。そこにかかれているとおりにやってみます。
(番号は、上記のサイトのものと、あわせていますが、
 訳ではなく、情報を追加してます。分かりにくいところは)

<<手順>>

(1)Sugarをインストールしたフォルダのした、modules/Charts/codeに、
   各種のグラフがあるので、

(2)そこから似てるのをコピーして、名前をかえる。

(3)そしたら、そのフォルダにある、predefined_charts.phpを開き、
   arrayのところに、いまのやつを追加する(もとのやつを元に、
   名前を(2)のやつにかえて、追加)

(4)(2)でコピーしたファイルを開き、元の名前になっているところ
   を新しくした名前にかえる。
   たぶん、クラス名と、コンストラクタ。
   それと、

$cache_file_name = $current_user->getUserPrivGuid
()."_前のファイルに関係した名前_".$dateFileNameSafe[0]."_".$dateFileNameSafe
[1].".xml";

 という行がある。そこの「前のファイルに関係した名前」のところを書き換える
 (書き換えないと、前のファイルのデータを見に行ってしまう)

   さらに、LBL_ではじまる、ラベルの部分をテキトーにかえる
  ((5)と対応させる)

(5)modules/Charts/language/en_us.lang.php、その他もろもろの言語ファイル
   に対して、(4)で、書き換えたもののことばを追加する。


(6)ここで、SugarCRMをたちあげて、ダッシュボードを開くと。。

(7)上記「既存のグラフのパラメータを変える」のところで書いた、
   コンボボックスにグラフ名が追加されているはず。

(8)なので、それを選択すると、自分で作ったものが表示される。

とはいっても、ここまででは、なにも、グラフを編集していない。
ここから先が問題。そのまえに。。。




■グラフの基礎知識

 ダッシュボードで表示しているグラフは、SugarCRMのフォームの下、
 cache/xmlに、以下の名前(さっきの$cache_file_nameで設定したやつ)で
 データが入っている

 操作してる人のGUID_(4)で変えた名前_日付1_日付2.xml

 そして、表示するときは、このファイル名をもとめ、あったらそれを表示し、なかったら、新規作成する。グラフごとに「(4)で変えた名前」は、違うので、対象者にあった、グラフに合ったデータを表示できるってわけ。

 ここで、Editでデータの範囲などを変えたりした場合は、このXMLファイルが再度作られる(なので、最新の指定内容が表示できる)。

 さてこのとき、そのXMLファイルを作るところを修正すれば、それにあったグラフが表示できることになる。これは、(4)で直していたファイル(=コピーして名前を変えたファイル)の、gen_xmlで行っている。




■新規に自分が作ったグラフを追加、表示させる(続き)

(9)ここで、(4)で修正していたファイルをもう一度開き、
   下のほうにある関数gen_xmlを表示して、そこを、検索したいように、
   好きなようになおす。
   (select文を発行しているところなど)

   なお、グラフは、((10)で書きますが、)SugarCRMのフォルダの下、
   include/chartsの下にある、Flashのものは、用意されています。。
   (swfとflaがあるもの。hbar,Vbar,line,pieなどありますね)
   が、これ以外のモノを使いたかっらら、自分で用意することになります。

   グラフに合わせてXMLを書き出すことになります。

(10)その(9)のgen_xml関数の一番下のほうに、

   $return = create_chart('pieF',$cache_file_name);

  のように、チャートを(上記ではpieF)指定するところがあるので、
  そこを、自分の表示したい図にします(XMLが、それ用にかかれていないと、
  真っ黒になっちゃったりもしますので、注意)

(11)もし、(9)で、奇特にも、フラッシュで、新しいグラフを作っちゃった
    人はSugarCRMのフォルダの下、include/chartsの下に入れてね(^^)




こんなかんじ。で、実際に、既存のグラフをコピーし、適当に名前を変えて、(8)までやってうまくいったけど。。(9)以降、そのgen_xmlを直すところが難しい(^^;)

 ので、また、そのへん、ウィリアムのいたずらが進化したら、報告します。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPからSOAPをやってみる(SugarCRMで)-その3:データ登録

2007-09-13 18:04:18 | SugarCRM

 昨日、PHPからSOAPをやってみる(SugarCRMで)-その2:データ読み込みについて書きましたけど、さっき書いたように、同じように、データ登録をやったらうまくいきませんでした。

 ということで、今回は、登録がうまくいくSOAPの呼び出し方のほうについて書いてみたいと思います。




■仕様

環境は、昨日や、さっき書いたのと同じ。
以下のリード(Leads)を登録します。
    ファーストネーム:Dan
    ラストネーム  :Aarons
    タイトル    :CFO
(なお、なんで、こんな名前なのかは、後のほうで書きます)




■ソース

で、ソースなんですけど、こんなかんじ
<?php
if(!defined('sugarEntry'))define('sugarEntry', true);
require_once('Sugar/include/nusoap/nusoap.php');

	//==============================//
	//	SugarCRMのSOAP呼び出し	//
	//==============================//
$soapclient = new nusoapclient('http://localhost/Sugar/soap.php');

	//==============================//
	//	ログインする		//
	//==============================//
$result = $soapclient->call(
	'login',
	array(	'user_auth'=>array(
			'user_name'=>'admin',
			'password'=>md5('adminのパスワード'), 
			'version'=>'.01'), 
		'application_name'=>'12345')
	);
$session = $result['id'];

	//==============================//
	//	リード作成		//
	//==============================//
$result = $soapclient->call(
		'set_entry',
		array(
			'session'=>$session,
			'module_name'=>'Leads',
			'name_value_list'=>array(
				array('name'=>'first_name', 'value'=>'Dan'),
				array('name'=>'last_name', 'value'=>'Aarons'),
				array('name'=>'title', 'value'=>'CFO')
				)
			)
		);

//	結果表示	
print_r($result);


	//==============================//
	//	終了			//
	//==============================//
	//	ログアウト。
$result = $soapclient->call('logout',array('session'=>$session));

?>

(上記 < > ¥は、本当は半角)

実際には、< > ¥を半角に置換するほか、
・nusoapclientのhttp://localhost/Sugar/soap.phpを、本当のSugarCRMのsoap.phpのあるところに置き換える。
・adminのパスワードは、本当のadminのパスワードにする
 (adminでログインする場合。他のログイン名なら、当然その人のパスワードで)
もやります。

今回は、callで、呼び出しメソッドを指定する方法でやったら。。

うまくいきました。




■サンプルがありました。

 SugarCRMをインストールしたフォルダにexamplesというフォルダがあり(moduleなんかと同レベルの位置のフォルダ)。そこにSoapTest.phpっていうサンプルがありました。それを参考にしています。

 そこにあった名前ツーかメールアドレスが、さっきのDan Aarons。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

SugarCRMのSOAP,set_entryでうまくいかず…=>できた!16時追加

2007-09-13 15:11:30 | SugarCRM

うぇーん、わかんないよお。。

SugarCRMの更新(idを入れないと新規作成になる)ということで、
set_entryを使って例を示そうと思ったんです。

こんなかんじで。。

<?php

	//==============================//
	//	SugarCRMのSOAP呼び出し	//
	//==============================//
	$client = new SoapClient("http://127.0.0.1/Sugar/soap.php?wsdl");

	//==============================//
	//	ログインする		//
	//==============================//
    	$user_auth = array(
      			'user_name' => 'admin',
     			'password' => md5('adminのパスワード'),
     			'version' => '1.1'
    	);
	$result = $client->login($user_auth,"12345");
	$id	=	$result->id;

	//==============================//
	//	リード作成		//
	//==============================//
	
	//引数設定
	$list = array(	array( 'name' => 'first_name','value' => 'Bill'),
			array( 'name' => 'last_name','value' => 'Gate'),
			array( 'name' => 'title','value' => 'CAO'));

	//	作成(set_entryでidがないと、追加する)
	$result = $client->set_entry($id,'Leads',$list);
	print_r($result);

	//==============================//
	//	データの取得		//
	//==============================//

	//	おしまい。ログアウト。
	$client->logout($id);

?>

(上記< > ¥は、当然、半角にして打ってます)

だけど、上記の例、first_nameとか、1件だけ指定するとうまくいくんだけど、
上記のように2件以上、設定するとうまくいかない。

この関数は、SoapSugarUsers.phpのset_entry関数に来るんだけど、そこの時点で、すでに1件しか入っていない。それも、nameが空になっている(first_name1項目しか、セットしてない状況ではOK)

うーん・・・なんでなんだろう。。

P.S ちなみに、リーダー作成の、create_leadは、うまくいく。




16時追加

できました!
もうひとつのSOAP呼び出し方法でできます。

というか、サンプルソースがありました。
べつのエントリにして、後で書きます。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPからSOAPをやってみる(SugarCRMで)-その2:データ読み込み

2007-09-12 17:36:43 | SugarCRM

 昨日、PHPからSOAPをやってみる(SugarCRMで)-その1:test実行について書きましたけど、さすがに、testメソッドをやっても、価値がないので、もっと、意味あるモノを。。

 まずは、読み込みから。




■仕様

 環境は、昨日と同じです(なので、PHPの設定は同じ)
 今日は、Accountsモジュールを3件よみます。条件はなにもつけないことにして、
 データの項目も全部出すこととします。

 インストール時に、データを設定する形にでインストールしておきます
 (=つまり、サンプルデータが入っているものとします)




■ソース

ソースは、以下のとおり

<?php
	//==============================//
	//	SugarCRMのSOAP呼び出し	//
	//==============================//
	$client = new SoapClient("http://127.0.0.1/Sugar/soap.php?wsdl");

	//==============================//
	//	ログインする		//
	//==============================//
    	$user_auth = array(
      			'user_name' => 'admin',
     			'password' => md5('adminのパスワード'),
     			'version' => '2.0'
    	);
	$result = $client->login($user_auth,"12345");
	$id	=	$result->id;
	

	//==============================//
	//	レコード読み込み	//
	//==============================//
	//	はじめの20件検索
	$result = $client->get_entry_list($id,"Accounts","","",0,"",3,0);

	//	表示
	for($recsu = 0 ; $recsu < count($result->entry_list) ; $recsu ++ )
	{
		printf("<BR>■■" .($recsu + 1) . "件目:■■<BR>");
		for($cellsu = 0 ; $cellsu 
			< count($result->entry_list[$recsu]->name_value_list)
				; $cellsu ++ )
		{
			printf("  " );
			printf($result->entry_list[$recsu]->name_value_list

[$cellsu]->name);
			printf(" : " );
			printf($result->entry_list[$recsu]->name_value_list

[$cellsu]->value);
			printf("<BR>" );
		}
	}

	//==============================//
	//	データの取得		//
	//==============================//

	//	おしまい。ログアウト。
	$client->logout($id);

?>

(上記< > ¥は、本当は半角なので、
 実際に書くときは、< > ¥は、半角に置換してね ^^)
これを、ローカルのhtdocsの下に、soaptest.phpという名前で
UTF-8で保存します。

adminのパスワードは、実際の、adminのパスワードを入れてください。

Versionに2.0って設定してますけど、これでいいかどうかは??
(ただ、これで、検索できました ^^;)
ちなみに、ここには、あなたが期待するSOAPのバージョンを入れるそうです。
(直訳です ^^;)

loginの第二引数"12345"は、ユニークなアプリケーションの名前(って、ユニークっていうのは、面白いでも、御茶ノ水にある床屋さんの名前でもない。一意の)ってことなので、本来、セッションIDとかいれるほうがいいんだろーけど、まあいいや



■実行

 そして、http://127.0.0.1/soaptest.phpとやると、
 以下のように3件、サンプルデータを表示します。

■■1件目:■■
  assigned_user_name : max
  id : 765ddf44-7275-0b1b-eb78-46dd0ed52a5e
  date_entered : 2007-09-04 07:52:56
  date_modified : 2007-09-04 07:52:56
  modified_user_id : 1
  assigned_user_id : max_id
  created_by : 1
  name : A.B.ケアブレインズ 290980
  parent_id : 
  account_type : Customer
  industry : Apparel
  annual_revenue : 
  phone_fax : 
  billing_address_street : 2 Penultimate Loop
  billing_address_city : Böblingen
  billing_address_state : CA
  billing_address_postalcode : 47939
  billing_address_country : USA
  description : 
  rating : 
  phone_office : (437) 703-5991
  phone_alternate : 
  email1 : dev14@example.tw
  email2 : 
  website : www.kidhr.de
  ownership : 
  employees : 
  sic_code : 
  ticker_symbol : 
  shipping_address_street : 2 Penultimate Loop
  shipping_address_city : Böblingen
  shipping_address_state : CA
  shipping_address_postalcode : 47939
  shipping_address_country : USA
  deleted : 0
  account_name : 
  campaign_id : 

■■2件目:■■
  assigned_user_name : max
  id : ac05dc1d-f6ad-dbcc-e95a-46dd0f003177
  date_entered : 2007-09-04 07:53:38
  date_modified : 2007-09-04 07:53:38
  modified_user_id : 1
  assigned_user_id : max_id
  created_by : 1
  name : A.B.ケアブレインズ 390781
  parent_id : 
  account_type : Customer
  industry : Electronics
  annual_revenue : 
  phone_fax : 
  billing_address_street : 2 Penultimate Loop
  billing_address_city : Lisbon
  billing_address_state : CA
  billing_address_postalcode : 38591
  billing_address_country : USA
  description : 
  rating : 
  phone_office : (638) 016-3589
  phone_alternate : 
  email1 : qa.phone@example.org
  email2 : 
  website : www.beansinfo.info
  ownership : 
  employees : 
  sic_code : 
  ticker_symbol : 
  shipping_address_street : 2 Penultimate Loop
  shipping_address_city : Lisbon
  shipping_address_state : CA
  shipping_address_postalcode : 38591
  shipping_address_country : USA
  deleted : 0
  account_name : 
  campaign_id : 

■■3件目:■■
  assigned_user_name : will
  id : 58a4313d-5884-bccb-f2ab-46dd0eea9c66
  date_entered : 2007-09-04 07:53:03
  date_modified : 2007-09-04 07:53:03
  modified_user_id : 1
  assigned_user_id : will_id
  created_by : 1
  name : A.B.ケアブレインズ 589608
  parent_id : 
  account_type : Customer
  industry : Manufacturing
  annual_revenue : 
  phone_fax : 
  billing_address_street : 678 Rue St. Angoulême
  billing_address_city : ロンドン
  billing_address_state : NY
  billing_address_postalcode : 21310
  billing_address_country : USA
  description : 
  rating : 
  phone_office : (718) 148-4153
  phone_alternate : 
  email1 : kid.dev@example.com
  email2 : 
  website : www.sectionsupport.tv
  ownership : 
  employees : 
  sic_code : 
  ticker_symbol : 
  shipping_address_street : 678 Rue St. Angoulême
  shipping_address_city : ロンドン
  shipping_address_state : NY
  shipping_address_postalcode : 21310
  shipping_address_country : USA
  deleted : 0
  account_name : 
  campaign_id : 

(上記< > ¥は、本当は半角)

データは、サンプルにはいってたデータです。

読み込みは、こんなかんじ。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

SOAPをJAVAからやってみる(SugarCRMで)-その1:test実行。

2007-09-12 11:50:24 | SugarCRM

 昨日のPHPからSOAPをやってみる(SugarCRMで)-その1:test実行と同じことを、Javaでやってみたいと思います。




■環境設定

 まず、SugarCRMを入れるまでは、昨日のPHP版とおなじ。

 Javaに関しては、Eclipseで開発しました。
 追加するJarには、JavaMail,JAF,Apache SOAPがあります
 (Xerces-J-toolsは追加しても、しなくてもエラーにならなかった)。

 それらのありかは、
JavaでHello World > SOAP編
http://www.hellohiro.com/soap.htm

に書いてあるので、そいつを追加しました。




■で、実行ソースは

こんなかんじ。

import java.net.URL;
import java.util.*;
import org.apache.soap.Constants;
import org.apache.soap.rpc.*;

public class SugarSoap {

	public static void main(String[] args) {
		try
		{
      			URL url = new URL("http://localhost/Sugar/soap.php");

			// Callオブジェクトを生成
			Call call = new Call();
				
			// ターゲットとなるURIを指定
			call.setTargetObjectURI("http://localhost/Sugar/soap.php");

			// ターゲットとなるメソッドを指定
			call.setMethodName("test");

			// 直列化のスタイルを指定
			call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);

			//	引数設定
			Vector vec = new Vector();
			Parameter para
			  = new Parameter("string", String.class, "abcd", null);
			vec.addElement(para);
    			call.setParams(vec);

			// 呼び出しを実行
			Response resp = call.invoke(url, "");

			// 戻り値を取得
			Parameter ret = resp.getReturnValue();
			System.out.println(ret.getValue());
		}
		catch (Exception e)
		{
      		         e.printStackTrace();
    		}
	}
}

上記JavaでHelloWorldと同じようにかいてあります
引数があるのが違うのと、setTargetObjectURIで、urnがよくわかんなかったんで、そのままサイトを指定してあるところが違います(これで、いいんかよくわかんないけど動いた)

これで、EclipseからRunすると、adcbと、でてきます。

めでたしめでたし。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPからSOAPをやってみる(SugarCRMで)-その1:test実行

2007-09-11 19:27:38 | SugarCRM

 SugarCRMのSOAPを、PHPで呼び出してみました。
 (といっても、まだtestメソッドで超簡単なやつだけど)
 その結果報告。




■環境

PHP5.0.5 SugarCRM 4.5(日本語パッチは、あてていません)

PHP5から、SOAPが標準で入ったようなので、それ以前と、それ以降では、設定方法は大きく違うと思います。

あ、もちろん、Windows(Windows XP)。Linuxの人は、ぜんぜん違うと思います。




■SOAP起動のためのPHPの設定(SugarCRMにかかわらず、SOAP一般で必要)

(1)まず、エクステンションがはいっているところ(php/extとか)に
   php_soap.dllがいることを確認

(2)php.ini(Windowsフォルダの下かな?)のところ、
;Windows Extensions
の extension= がいっぱい並んでいるところに、

 extension=php_soap.dll

がなかったら(ウィリアムのいたずらはなかった)追加(コメントならはずす)

これ以外のSOAPの設定は、なぜか書いてあった。

(3)設定したら再起動




■SugarCRMのSOAPを呼び出す。

 今回は、testという、送った値をそのまま返してくれるSOAP APIを呼び出してみます。SugarCRMは、ローカルにSugarっていうフォルダが作ってあり、その中にあるsoap.phpを呼び出しています。結果を表示しているだけです。

で、そーすると、こんなかんじのソース

<?php
	//	SugarCRMのSOAP呼び出し
	$client = new SoapClient("http://127.0.0.1/Sugar/soap.php?wsdl");

	//	testメソッドの結果を受け取る
	$result = $client->test("abcd");

	//	表示してみる
 	printf($result);
?>

(上記< > ¥は、本当は半角)

これをsoaptest.phpとかいう名前で保存して
http://127.0.0.1/soaptest.php
で呼び出すと、引数で送ったabcdっていうのが、表示される。

めでたしめでたし。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MySQLに入ってるUTF-8のデータを、Accessで帳票出力(SugarCRMのデータで)

2007-09-10 18:21:27 | SugarCRM

 MySQLに入っているSugarCRMのUTF-8のデータを、
 AccessでODBC経由で読み込み、
 Accessのレポートで帳票を出力します。
 その方法。
(MySQLとAccess、はインストールされているとします。
 今回はSugarCRMのデータを読み込むので、SugarCRMもインストールしているとします。それ以外のデータを読む場合でも、そのデータ自体は、DBに入っているとします)




■ODBCドライバの取得

MySQL Connector/ODBC 3.51 Downloads
http://dev.mysql.com/downloads/connector/odbc/3.51.html

のサイトにいって、

Windows MSI Installer (x86) のDownloadをクリック。

ODBCドライバをダウンロードします。

そしたら、ダウンロードした、mysql-connector-odbc-3.51.19-win32.msiをダブルクリック。ODBCをインストールします。




■ODBCドライバのコード変換のための、my.cnf作成

C:ドライブの直下に、my.cnfという名前のファイルを作ります
(つまり、C:¥my.cnfという名前のファイルを作ります)

ファイルの中身は、以下のとおりです

[client]
default-character-set=sjis


なので、メモ帳で上記の内容を記述し、保存で、C:¥my.cnf(¥は、半角)を指定します。保存されると、myとなって、ショートカットっぽいアイコンになります(ウィリアムのいたずらのところは、そうなりました。ちなみにXPです)。




■ODBCの設定

・コントロールパネルを開いて、「管理ツール」をダブルクリック
・いろいろ開くから「データソース(ODBC)」をダブルクリック
・ダイアログがでてきたら、
   「ユーザーDNS」というタブをクリックして開き、
   「追加」ボタンをクリック

・「データソースの新規追加」ダイアログが出てきたら、
    MySQL ODBC 3.51 Driver
 を選択。「完了」ボタンをクリック

・次に出てくるODBCのダイアログ、
 Loginタブで
    Data Source Name は適当に設定 sugarcrmにしました。
    Serverは、接続するサーバー。今回はlocalhost
    Userは、接続するユーザー。今回はroot
    Passwordはユーザーのパスワード。rootのパスワードを入れました。
    Databaseは、今登録してあるDBを選ぶ形になってます。今回はsugarcrm
    Descriptionは書かなくてOK

つぎに、「Advanced」タグをクリックして、Advanced設定をします。
 Adbancedタブで、
  「Flags3」タブをクリック。
    Read Options From my.cnfをクリックして、チェックを入れます

 そしたら、OKをクリック。

これでODBC接続までOK




■Accessで、テーブルをリンク、操作できるように

・Accessを立ち上げ、ファイル→新規作成で、「空のデータベース」を指定して、
 空のデータベースをつくります(名前はなんでもよし)

・Accessの中に出てくるダイアログ、「オブジェクト」(左側)で、「テーブル」
 をクリック、テーブルを選択します。

・「ファイル」メニューから「外部データの取り込み」→「テーブルのリンク」
 と選択します。

・そうすると、ファイルを選択するダイアログが出るので、一番下にある
 「ファイルの種類」から、ODBCデータベース()を選択

・ダイアログが出てきたら、「コンピューターデータソース」タブをクリック

・そうすると、「■ODBCの設定」のとき、設定したものが(Loginタブの
 「Data Source Name」に設定したものが)、ダイアログの「データソース名」
 にでてくるので、それをダブルクリック。

・「テーブルのリンク」ダイアログで、「テーブル」のところに、テーブル名が
 でてくるから、「すべて選択」ダイアログをクリックした後で、「OK]ボタンを
 クリック

・たまに、主キーを設定しないといけないところもあるので、
 そのときは、ダイアログで聞いてくるから、適当に入れる。
 そうすると、全部テーブルがリンクされた状態になる

・もし、SugarCRMに、サンプルデータを入れた状態なら、casesテーブルに
 日本語が入っているので、casesテーブルをダブルクリック。
 開いてみて、日本語が入っていることを確認




■レポートを作成して帳票を出す。

・Accessのダイアログのオブジェクトの「フォーム」をクリックする。

・「ウィザードを使用してレポートを作成する」をダブルクリック。

・今回は「テーブル/クエリ」にcasesを選択してみます。

・選択可能なフィールドで、
  case_numberを選択後、 > ボタンをクリックして、この項目を出力項目へ

・同様にdata_entered,data_modified,assigned_user_id,name,status,priority
 を選択(しましたけど、皆さんの好きなものを選択してください。
 もちろん、このテーブル以外でもOK)。
 そしたら、「次へ」

・グループレベル、今回は設定しないので「次へ」をクリック

・昇順は、case_numberを選択して、「次へ」

・「表形式」、「横」が見やすいと思います。
 それと、「すべてのフィールドを1ページ内に収める」にしたほうが見やすいので
 それもチェック
 そうして、「次へ」
 
・スタイルは、「報告書」のままでいいので、「次へ」

・レポート名を適当に入れて、「完了」

そうすると、帳票が開きます。




って、わかりますう?
ま、自分用のメモってことで(^^;)
(自分でも、時間がたったらわかんなくなりそうだけど。。)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

SugarCRMで、SOAPのお勉強をしようと思ったら。。。

2007-09-03 16:51:33 | SugarCRM

 本屋さんに行ったら、SugarCRMの本があって、それを、ぺらぺらってみたら、SOAPでなんかできると書いてあった。

 ほー、SOAPのお勉強にいいかしら(^^?)

 と、おもって、しらべてみた。

 ここ
Sugar Open Source Documentation
http://www.sugarforge.org/frs/?group_id=20&release_id=253

の一番下に「SugarCRM SOAP Overview.rtf」ってあったので、これをみた。

ふむふむ。

(1)SOAPでloginを呼び出す。
    引数はuser_auth(ユーザー名、パスワード、バージョン)と、
    アプリケーション名?よくわかんないけど、まあいいや。
   で、そーすると、ID(=セッションID)がもらえる。

つぎに、userIDを欲しい人はもらう(getuser_idで)

(2)モジュールからの検索結果が欲しい場合
   SOAPで、get_entry_listを呼び出す。
   引数は、(1)で受け取ったセッションIDと、
    モジュール名と
    クエリ(検索)内容と
    検索結果のソート順(どの項目でソート?)
    結果を返してもらいたいフィールドと
    結果の最大数

えー、もしもーし!

 そーすると、こいつを発行するためには、
 ・モジュール名を知っている
 ・モジュールに、どういう項目があるか知っている
ってことになりませんか・・そのモジュール構成は、いずこに・・・

 まさか、インストールして、SugarBeanから継承しているクラスをしらべて、そこの変数をチェックしろといっている・・


あー、なんか、めんどっちそうだ(>_<!)

ボツ、没。

やっぱ、イーストのSOAPでお勉強しよーっと・・・



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする