OFORMSにユニークなIDを割り当てる方法

2023年01月24日著者:Denis

ONLYOFFICE製品では、記入可能なフォームを簡単に作成することができます。前回の記事では、CSV/TXTデータを入力可能なコンボボックスに変換するマクロをご紹介しました。今回は、記入可能なフォームにユニークなIDを割り当てるマクロを構築することで、電子文書をより整理していきます。 Assign a unique id to OFORMS

前提条件

新しいプロジェクトでは、上記のマクロで使用したのと同様のコンセプトを実装します。

マクロのコードは以下の通りです。

   function LoadFile() {
        $.ajax({
            url: 'file:///C:/Users/LEOPARD/Desktop/Book1.csv',
            dataType: 'text',
        }).done(successFunction);
    } 
    function successFunction(data) {
    
        var arrAllRows = data.split("\n");
    
        var oComboBoxForm = Api.CreateComboBoxForm({ "key": "Personal information", "tip": "Choose your country", "required": true, "placeholder": "Country", "editable": false, "autoFit": false, "items": arrAllRows });
        var oParagraph = Api.CreateParagraph();
        oParagraph.AddElement(oComboBoxForm);
        oDocument.InsertContent([oParagraph]);
    }
    LoadFile();

新しいマクロで、InsertContentメソッドも取り込みます。これは、カーソルが置かれている場所に要素を挿入するものです。ただし、今回は挿入されるコンテンツが異なります。

マクロの構築

このコンテンツを作成するために、generate関数を追加します。そこでは、key変数を作成し、空白に設定しています。後で、生成された値を格納することになります。また、data変数を追加しています。この変数には、大文字と小文字のアルファベットと数字が含まれています。これがユニークIDの構成要素です。

function generate () {
    let key = '';
    const data = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 
            'abcdefghijklmnopqrstuvwxyz0123456789';
};

次に、12回の反復を行うfor loopを追加します。各反復は一意な値を返します。つまり、12回の繰り返しにより、12種類のユニークな文字がIDとして生成されます。次に、Math.randomメソッドを使って、各反復で一意のインデックスを取得します。その後、このインデックスをcharAtメソッドで使用して、データ変数から一意な文字を取得します。その結果をkey変数に代入し、さらに使用するためにそれを返します。次にgenerate関数を呼び出してID変数に代入しています。

   for (let i = 1; i <= 12; i++) {
        let index = Math.floor(Math.random()
                    * data.length + 1);
          
        key += data.charAt(index)
    }
      
    return key;
};
 const id = generate();

さて、生成されたコンテンツをドキュメントに挿入する必要があります。まず、アクティブなフォームを対象にします。

var oDocument = Api.GetDocument();

その後、段落を作成し、そこにtext要素を追加します。パラメータに変数IDを渡すことで、生成されたコンテンツをこの要素で包んでいます。

var oParagraph = Api.CreateParagraph();
oParagraph.AddText(id);

そして、挿入します。InsertContentメソッドは、カーソル位置の右側に要素を埋め込むものです。また、KeepTextOnlyプロパティを指定しています。このプロパティをtrueにすることで、位置合わせの問題を回避することができます。

oDocument.InsertContent([oParagraph], { "KeepTextOnly": true });

マクロのコード全体は以下の通りです。

function generate () {
    let key = '';
    const data = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 
            'abcdefghijklmnopqrstuvwxyz0123456789';
      
    for (let i = 1; i <= 12; i++) {
        let index = Math.floor(Math.random()
                    * data.length + 1);
          
        key += data.charAt(index)
    }
      
    return key;
};
const id = generate();
var oDocument = Api.GetDocument();
var oParagraph = Api.CreateParagraph();
oParagraph.AddText(id);
oDocument.InsertContent([oParagraph], { "KeepTextOnly": true })

では、マクロを実行して、その動きを見てみましょう。

ぜひ、このマクロを活用して、みなさんのワークフローに取り入れてください。ONLYOFFICEマクロは非常に汎用性が高く、ユーザーが様々な方法でドキュメントを操作することを可能にします。このマクロは、私たちのAPIメソッドを実装することで実現できる多くの例のひとつに過ぎません。

私たちは、みなさんが実験し、自分自身のプロジェクトに着手することを親切に奨励します。ご質問やアイディアがありましたら、遠慮なくお聞かせください。私たちは、議論と協力に常にオープンです。