1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pleasanter Tips:子データの内容を親データのコメントに転記する

Last updated at Posted at 2023-06-13

Pleasanterはレコードにコメントを書くことができ、商談履歴や対応履歴を記録するには大変便利です。
また一覧には最新の3コメントが表示され可視性も高いと思います。
しかし、データの構造で子データを作成した場合には一覧時にコメントと同じような出力ができないので、今回は子データのタイトルと内容を親データのコメントに転記しました。

事前準備(必要なスキル)

今回のテクニックは拡張SQLを実行します。従って、誤って記述する事で他のデータを更新しかねません。コードをコピペなどして実行した後データが破損しても一切の責任は問えませんので予めご了承ください。
データベースはSQL-SERVERになるのでPostgreSQLの場合はそのまま実行できません。

Pleasanterでデータ格納先の準備

Pleasanterで親・子データのサイトを作成します。また親子関係を定義してください。
下記サンプルは親・子データは記録テーブルで作成し、子テーブルの分類Aを親データのリンクに使用しました。

画面サンプル

image.png

image.png

コメントの記述内容

コメントにはタイトルと内容および子データへのリンクを記述しています。
コメントはテキストでタイトルには#を付けています。
マークダウンなどでも記述する方法も有ります。

制限事項

子データの内容はテキスト形式のみです。マークダウンで記述した場合は内容をテキストに変換して上で処理するなどが必要です。
子データのタイトルが他の項目と結合している場合は、下記スクリプトでは正しく表示されません。そのような場合はItemsテーブルのTitleを使用するように変更してください。

スクリプトなど

下記の記述をExtendedSqlsのフォルダに作成してください。Windowsで標準にインストールすると
C:\web\pleasanter\Implem.Pleasanter\App_Data\Parameters\ExtendedSqls
になります。
ファイル名に制限はありませんが今回は
Child2Comment.json
Child2Comment.json.sql
にしました。
このスクリプトの実行は子データ側で行います。

拡張SQL(定義部)

Child2Comment.json

{
  "Description": "Child2Comment",
  "SiteIdList": [19947],
  "OnCreated": true,
  "OnUpdated": true,
  "OnDeleted": true,
  "OnBulkDeleted": true,
  "OnImported": true,
}

拡張SQL(SQL部)※SQL-SERVER用です

Child2Comment.json.sql

DECLARE @Id INT = {{Id}}   --子データのID
DECLARE @URL NVARCHAR(MAX) = 'http://localhost'
DECLARE @Commets TABLE(
	 CommentId INT
	,CreatedTime NVARCHAR(MAX)
	,Creator INT
	,Body NVARCHAR(MAX)
)
BEGIN
  DECLARE @ResultIdParent INT
  DECLARE @SiteIdParent INT
  DECLARE @SiteIdChild INT
  DECLARE @DataJson NVARCHAR(MAX)
  DECLARE @ResultIdChild INT,@Title VARCHAR(MAX), @Body VARCHAR(MAX), @Owner INT, @UpdatedTime DATETIME, @CommentId INT=0
  DECLARE @CRLF NVARCHAR(MAX)=CHAR(13)+CHAR(10)

  --子データにリンクする親IDと子データサイトIDを取得を取得(ClassA)
  SELECT @ResultIdParent=ClassA, @SiteIdChild=SiteId FROM Results WHERE ResultId=@Id
  --親データのサイトIDを取得
  SELECT @SiteIdParent=SiteId FROM Results WHERE ResultId=@ResultIdParent
  --親データに関連する子データリストを取得
  DECLARE c1 CURSOR FOR SELECT ResultId,Title,Body,Owner,UpdatedTime FROM Results WHERE SiteId=@SiteIdChild AND ClassA=@ResultIdParent ORDER BY UpdatedTime DESC
  OPEN c1
  FETCH NEXT FROM c1 INTO @ResultIdChild,@Title,@Body,@Owner,@UpdatedTime
  WHILE @@FETCH_STATUS = 0
  BEGIN
	SET @CommentId = @CommentId + 1
    --コメントデータ作成
	DECLARE @CommentBody NVARCHAR(MAX)=''
    --SET @CommentBody = '[md]'  --マークダウンを使いたい場合
	SET @CommentBody = @CommentBody + '# ' + @Title + '  '+ @CRLF
	SET @CommentBody = @CommentBody + @Body + '  ' + @CRLF
	SET @CommentBody = @CommentBody + @URL + '/items/'+CAST(@ResultIdChild AS NVARCHAR)
    --コメント日時作成(直接出力しても良いが+09:00が付かない為に作成)
	DECLARE @CommentUpdatedTime NVARCHAR(MAX)=''
	SET @CommentUpdatedTime = @CommentUpdatedTime + FORMAT(@UpdatedTime,'yyyy-MM-dd')
	SET @CommentUpdatedTime = @CommentUpdatedTime + 'T'
	SET @CommentUpdatedTime = @CommentUpdatedTime + FORMAT(@UpdatedTime,'HH:mm:ss.fffffff')
	SET @CommentUpdatedTime = @CommentUpdatedTime + '+09:00'
    --コメントテーブルに追加
	INSERT INTO @Commets VALUES(@CommentId,@CommentUpdatedTime,@Owner,@CommentBody)
    FETCH NEXT FROM c1 INTO @ResultIdChild,@Title,@Body,@Owner,@UpdatedTime
  END
  CLOSE c1
  DECLARE @CommentsJson NVARCHAR(MAX) = (SELECT CommentId,CreatedTime,Creator,Body FROM @Commets ORDER BY CommentId ASC FOR JSON AUTO)
  --SELECT @CommentsJson --内容確認用
  UPDATE Results SET Comments=@CommentsJson WHERE SiteId=@SiteIdParent AND ResultId=@ResultIdParent
END;
DEALLOCATE c1

May The Pleasanter Be With You.

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?