You are currently viewing Tìm folder path và tìm kiếm Data Extension trong Marketing Cloud (2)

Tìm folder path và tìm kiếm Data Extension trong Marketing Cloud (2)

Như ở bài trước, ta đã biết cách tìm và build path thông qua folder ID. Vậy làm sao để tìm vị trí của một Data Extension đây, liệu nó có giống như tìm thông qua folder ID?

Nếu bạn từng đọc blog của Gâu Đần thì trong đó mình đã giới thiệu cho bạn một Extension gọi là DESelect Search dùng để tìm kiếm Data Extension và những asset khác trong Content Builder. Hôm nay Gâu Đần sẽ hướng dẫn các bạn build một thứ tương tự để tìm kiếm Data Extension mà không phụ thuộc vào app thứ 3 nhé.

Cấu trúc của DataExtension object

Nếu bạn để ý sẽ thấy Data Extension object hay các asset khác trong Content Builder đều có một attribute có tên là CategoryID đây chính là ID của folder. Vì vậy muốn tìm nó nằm ở đâu thì phải biết được value của attribute này là gì phải không?

Cách tìm Id của một folder chứa Data Extension

*Đây là chỉ một bước phụ giúp các bạn tìm Folder ID chứa một Data Extension nhanh chóng và để giúp bạn hiểu hơn về folder chứa Data Extension.

Cách 1: tìm trên Email Studio

Chẳng hạn mình có Data Extension tên là Gaudan customers nằm trong một sub-folder tên là Test Folder đi.

Chỉ cần trỏ con chuột tới folder này thì ở dưới cùng của browser ta có thể xem trước được ID của folder này. Như trong hình thì Folder ID/Category ID là 429241

Cách 2: tìm trên Contact Builder

Từ mục Data Extension, ta F12 để inspect element, sau đó trỏ về folder mà ta cần tìm

Ở mục bên phải ta đã tìm thấy được folder ID cho folder này là 429241

Làm thế này cũng tiện vì có thể click vào copy được, chớ cách 1 chỉ có nhớ thôi.

Tìm path trong folder của Data Extension có giống như trong Content Builder?

Để trả lời được câu hỏi này chỉ có thử mới biết thôi. Dựa vào bài trước, Gâu Đần tạo một hàm tìm kiếm như sau:

<script runat="server">
Platform.Load("core", "1.1");

var folderID = 429241; // PUT YOUR FOLDER ID HERE
findpath(folderID);

function findpath(folderID) {
var path = [],
    hasMore = true;
var prox = new Script.Util.WSProxy();
var cols = ["ID", "Name", "ParentFolder.ID", "ParentFolder.Name"];
var filter = {Property: "ID",SimpleOperator: "equals", Value: folderID};
while (hasMore) {
    var req = prox.retrieve("DataFolder", cols, filter);
    // Check if the folder ID is existing
    if (req.Results[0].length > 0) {
        var FolderName =  req.Results[0].Name;
        path.unshift(FolderName);
        if (req.Results[0].ParentFolder.ID != 0) {
                filter["Value"] = req.Results[0].ParentFolder.ID;
        } else {
            hasMore = false; // exit the loop
        }
    } else {
        hasMore = false; // exit the loop
        Write("Cannot find this folder ID.")
    }    
}
path = path.join(' /');
Write(path);
}
</script>

Và ta có kết quả là:

Ok ngon rồi. Vậy là hàm này vẫn sử dụng được cho folder chứa Data Extension smiling face with halo 

Build trang tìm kiếm theo tên của Data Extension hoặc folder ID

Build submit form trên Cloudpage

Vào Cloudpage ta sẽ tạo một landingPage và có giao diện như sau:

<!DOCTYPE html>
<html>
<body>
<h2>Search by Data Extension name and folder ID</h2>
<form>
    <select name="Type" data-field-type="Text" required="" id="TypeID">
        <option value="DataExtension">Data Extension name</option>
        <option value="Folder">Folder ID</option>
    </select>
    equals
    <input type="text" name="Val" value="" id="ValID"> <br>
    <input type="submit" value="Search">
  </form>
</body>
</html>

<script>
var input_element = document.getElementById("ValID");
var type_element = document.getElementById("TypeID");
// Get parameters
var queryString = window.location.search;
var urlParams = new URLSearchParams(queryString);
var input_val = urlParams.get('Val');
var type_val = urlParams.get('Type');
// Fill out back the form
if(input_element.value == '') {
    input_element.value = input_val;
    type_element.value = type_val;
}
</script>

Ta có giao diện Old but Gold như sau face with tears of joy 

Đoạn script dưới đơn thuần là mỗi khi ta submit form thì hắn sẽ truyền lại giá trị cũ, để search cho tiện.

Build hàm tìm kiếm bằng tên Data Extension hoặc folder ID

<script runat="server">
Platform.Load("core", "1.1");
function findDataExtension(DEname){
    var req
    var prox = new Script.Util.WSProxy();
    var cols = ["CategoryID", "CustomerKey", "Name", "IsSendable"];
    var filter = {Property: "Name", SimpleOperator: "equals", Value: DEname};
    
        req = prox.retrieve("DataExtension", cols, filter);
    // Check if the DE name is existing    
    if (req.Results[0].length > 0) {
        var folderID = req.Results[0].CategoryID;
        findpath(folderID);
    } else {
        Write("Cannot find this DE name. Please enter the exact name of the DE.");
    }
}
</script>

Full code

<!DOCTYPE html>
<html>
<body>
<h2>Search by Data Extension name and folder ID</h2>
<form>
    <select name="Type" data-field-type="Text" required="" id="TypeID">
        <option value="DataExtension">Data Extension name</option>
        <option value="Folder">Folder ID</option>
    </select>
    equals
    <input type="text" name="Val" value="" id="ValID"> <br>
    <input type="submit" value="Search">
  </form>
</body>
</html>

<script>
var input_element = document.getElementById("ValID");
var type_element = document.getElementById("TypeID");
// Get parameters
var queryString = window.location.search;
var urlParams = new URLSearchParams(queryString);
var input_val = urlParams.get('Val');
var type_val = urlParams.get('Type');
// Fill out back the form
if(input_element.value == '') {
    input_element.value = input_val;
    type_element.value = type_val;
}
</script>
<script runat="server">
Platform.Load("core", "1.1");
var type = Request.GetQueryStringParameter("Type");
var val = Request.GetQueryStringParameter("Val");
if(type != null) {
    if(type == "DataExtension") {
        findDataExtension(val);
    }
    else {
        findpath(val);
    }
}
function findDataExtension(DEname){
    var req
    var prox = new Script.Util.WSProxy();
    var cols = ["CategoryID", "CustomerKey", "Name", "IsSendable"];
    var filter = {Property: "Name", SimpleOperator: "equals", Value: DEname};
    
        req = prox.retrieve("DataExtension", cols, filter);
    // Check if the DE name is existing    
    if (req.Results[0].length > 0) {
        var folderID = req.Results[0].CategoryID;
        findpath(folderID);
    } else {
        Write("Cannot find this DE name. Please enter the exact name of the DE.");
    }
}

function findpath(folderID) {
var path = [],
    hasMore = true;
var prox = new Script.Util.WSProxy();
var cols = ["ID", "Name", "ParentFolder.ID", "ParentFolder.Name"];
var filter = {Property: "ID",SimpleOperator: "equals", Value: folderID};
while (hasMore) {
    var req = prox.retrieve("DataFolder", cols, filter);
    // Check if the folder ID is existing
    if (req.Results[0].length > 0) {
        var FolderName =  req.Results[0].Name;
        path.unshift(FolderName);
        if (req.Results[0].ParentFolder.ID != 0) {
                filter["Value"] = req.Results[0].ParentFolder.ID;
        } else {
            hasMore = false; // exit the loop
        }
    } else {
        hasMore = false; // exit the loop
        Write("Cannot find this folder ID.")
    }    
}
path = path.join(' /');
Write(path);
}
</script>

Test test test

Tìm kiếm bằng tên DE

Bằng folder ID

Taddaaa vậy là ta đã build một trang tìm kiếm Data Extension và folder rất tiện và hay ho đúng không nào!
Kể cả bạn muốn build để search theo tên DE liên quan thay vì tên chính xác thì ta vẫn hoàn toàn có thể làm được nhưng sẽ tốn thêm chút công sức 😀

Leave a Reply