1e41f4b71Sopenharmony_ci# @ohos.configPolicy (Configuration Policy) (System API)
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ciThe **configPolicy** module provides APIs for obtaining the custom configuration directory and file path based on the predefined configuration level.
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ci>  **NOTE**
6e41f4b71Sopenharmony_ci>
7e41f4b71Sopenharmony_ci>  The initial APIs of this module are supported since API version 8. Newly added APIs will be marked with a superscript to indicate their earliest API version.
8e41f4b71Sopenharmony_ci>
9e41f4b71Sopenharmony_ci>  The APIs provided by this module are system APIs.
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci## Modules to Import
12e41f4b71Sopenharmony_ci
13e41f4b71Sopenharmony_ci```ts
14e41f4b71Sopenharmony_ciimport configPolicy from '@ohos.configPolicy';
15e41f4b71Sopenharmony_ci```
16e41f4b71Sopenharmony_ci
17e41f4b71Sopenharmony_ci## getOneCfgFile
18e41f4b71Sopenharmony_ci
19e41f4b71Sopenharmony_cigetOneCfgFile(relPath: string, callback: AsyncCallback<string>)
20e41f4b71Sopenharmony_ci
21e41f4b71Sopenharmony_ciObtains the path of the configuration file with the highest priority based on the specified file name. This API uses an asynchronous callback to return the result.
22e41f4b71Sopenharmony_ciIf there are two **config.xml** files, **/system/etc/config.xml** and **/sys_pod/etc/config.xml**, in ascending order of priority, **/sys_pod/etc/config.xml** is returned.
23e41f4b71Sopenharmony_ci
24e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
25e41f4b71Sopenharmony_ci
26e41f4b71Sopenharmony_ci**Parameters**
27e41f4b71Sopenharmony_ci
28e41f4b71Sopenharmony_ci| Name  | Type                       | Mandatory| Description                                      |
29e41f4b71Sopenharmony_ci| -------- | --------------------------- | ---- | ------------------------------------------ |
30e41f4b71Sopenharmony_ci| relPath  | string                      | Yes  | Name of the configuration file.                                |
31e41f4b71Sopenharmony_ci| callback | AsyncCallback<string> | Yes  | Callback used to return the path of the configuration file.|
32e41f4b71Sopenharmony_ci
33e41f4b71Sopenharmony_ci**Error codes**
34e41f4b71Sopenharmony_ci
35e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md).
36e41f4b71Sopenharmony_ci
37e41f4b71Sopenharmony_ci| ID| Error Message                                                                      |
38e41f4b71Sopenharmony_ci| ------- | ---------------------------------------------------------------------------- |
39e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.|
40e41f4b71Sopenharmony_ci
41e41f4b71Sopenharmony_ci**Example**
42e41f4b71Sopenharmony_ci
43e41f4b71Sopenharmony_ci  ```ts
44e41f4b71Sopenharmony_ci  import { BusinessError } from '@ohos.base';
45e41f4b71Sopenharmony_ci
46e41f4b71Sopenharmony_ci  try {
47e41f4b71Sopenharmony_ci    let relpath: string = 'etc/config.xml';
48e41f4b71Sopenharmony_ci    configPolicy.getOneCfgFile(relpath, (error: BusinessError, value: string) => {
49e41f4b71Sopenharmony_ci      if (error == null) {
50e41f4b71Sopenharmony_ci        console.log('value is ' + value);
51e41f4b71Sopenharmony_ci      } else {
52e41f4b71Sopenharmony_ci        console.log('error occurs ' + error);
53e41f4b71Sopenharmony_ci      }
54e41f4b71Sopenharmony_ci    });
55e41f4b71Sopenharmony_ci  } catch (error) {
56e41f4b71Sopenharmony_ci    let code = (error as BusinessError).code;
57e41f4b71Sopenharmony_ci    let message = (error as BusinessError).message;
58e41f4b71Sopenharmony_ci    console.log('error:' + code + ',' + message);
59e41f4b71Sopenharmony_ci  }
60e41f4b71Sopenharmony_ci  ```
61e41f4b71Sopenharmony_ci
62e41f4b71Sopenharmony_ci## getOneCfgFile
63e41f4b71Sopenharmony_ci
64e41f4b71Sopenharmony_cigetOneCfgFile(relPath: string): Promise<string>
65e41f4b71Sopenharmony_ci
66e41f4b71Sopenharmony_ciObtains the path of the configuration file with the highest priority based on the specified file name. This API uses a promise to return the result.
67e41f4b71Sopenharmony_ci
68e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
69e41f4b71Sopenharmony_ci
70e41f4b71Sopenharmony_ci**Parameters**
71e41f4b71Sopenharmony_ci
72e41f4b71Sopenharmony_ci| Name | Type  | Mandatory| Description      |
73e41f4b71Sopenharmony_ci| ------- | ------ | ---- | ---------- |
74e41f4b71Sopenharmony_ci| relPath | string | Yes  | Name of the configuration file.|
75e41f4b71Sopenharmony_ci
76e41f4b71Sopenharmony_ci**Error codes**
77e41f4b71Sopenharmony_ci
78e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md).
79e41f4b71Sopenharmony_ci
80e41f4b71Sopenharmony_ci| ID| Error Message                                                                      |
81e41f4b71Sopenharmony_ci| ------- | ---------------------------------------------------------------------------- |
82e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.|
83e41f4b71Sopenharmony_ci
84e41f4b71Sopenharmony_ci**Return value**
85e41f4b71Sopenharmony_ci
86e41f4b71Sopenharmony_ci| Type                  | Description                    |
87e41f4b71Sopenharmony_ci| ---------------------- | ------------------------ |
88e41f4b71Sopenharmony_ci| Promise<string>  | Promise used to return the path of the configuration file.|
89e41f4b71Sopenharmony_ci
90e41f4b71Sopenharmony_ci**Example**
91e41f4b71Sopenharmony_ci
92e41f4b71Sopenharmony_ci  ```ts
93e41f4b71Sopenharmony_ci  import { BusinessError } from '@ohos.base';
94e41f4b71Sopenharmony_ci
95e41f4b71Sopenharmony_ci  try {
96e41f4b71Sopenharmony_ci    let relpath: string = 'etc/config.xml';
97e41f4b71Sopenharmony_ci    configPolicy.getOneCfgFile(relpath).then((value: string) => {
98e41f4b71Sopenharmony_ci      console.log('value is ' + value);
99e41f4b71Sopenharmony_ci    }).catch((error: BusinessError) => {
100e41f4b71Sopenharmony_ci      console.log('getOneCfgFile promise ' + error);
101e41f4b71Sopenharmony_ci    });
102e41f4b71Sopenharmony_ci  } catch (error) {
103e41f4b71Sopenharmony_ci    let code = (error as BusinessError).code;
104e41f4b71Sopenharmony_ci    let message = (error as BusinessError).message;
105e41f4b71Sopenharmony_ci    console.log('error:' + code + ',' + message);
106e41f4b71Sopenharmony_ci  }
107e41f4b71Sopenharmony_ci  ```
108e41f4b71Sopenharmony_ci
109e41f4b71Sopenharmony_ci## getCfgFiles
110e41f4b71Sopenharmony_ci
111e41f4b71Sopenharmony_cigetCfgFiles(relPath: string, callback: AsyncCallback<Array<string>>)
112e41f4b71Sopenharmony_ci
113e41f4b71Sopenharmony_ciObtains a list of configuration files with the specified name, sorted in ascending order of priority. This API uses an asynchronous callback to return the result.
114e41f4b71Sopenharmony_ciIf there are two **config.xml** files, **/system/etc/config.xml** and **/sys_pod/etc/config.xml**, in ascending order of priority, **/system/etc/config.xml, /sys_pod/etc/config.xml** is returned.
115e41f4b71Sopenharmony_ci
116e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
117e41f4b71Sopenharmony_ci
118e41f4b71Sopenharmony_ci**Parameters**
119e41f4b71Sopenharmony_ci
120e41f4b71Sopenharmony_ci| Name  | Type                                    | Mandatory| Description                      |
121e41f4b71Sopenharmony_ci| -------- | ---------------------------------------- | ---- | -------------------------- |
122e41f4b71Sopenharmony_ci| relPath  | string                                   | Yes  | Name of the configuration file.                |
123e41f4b71Sopenharmony_ci| callback | AsyncCallback<Array<string>> | Yes  | Callback used to return the file list.|
124e41f4b71Sopenharmony_ci
125e41f4b71Sopenharmony_ci**Error codes**
126e41f4b71Sopenharmony_ci
127e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md).
128e41f4b71Sopenharmony_ci
129e41f4b71Sopenharmony_ci| ID| Error Message                                                                      |
130e41f4b71Sopenharmony_ci| ------- | ---------------------------------------------------------------------------- |
131e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.|
132e41f4b71Sopenharmony_ci
133e41f4b71Sopenharmony_ci**Example**
134e41f4b71Sopenharmony_ci
135e41f4b71Sopenharmony_ci  ```ts
136e41f4b71Sopenharmony_ci  import { BusinessError } from '@ohos.base';
137e41f4b71Sopenharmony_ci
138e41f4b71Sopenharmony_ci  try {
139e41f4b71Sopenharmony_ci    configPolicy.getCfgFiles('etc/config.xml', (error: BusinessError, value: Array<string>) => {
140e41f4b71Sopenharmony_ci      if (error == null) {
141e41f4b71Sopenharmony_ci        console.log('value is ' + value);
142e41f4b71Sopenharmony_ci      } else {
143e41f4b71Sopenharmony_ci        console.log('error occurs ' + error);
144e41f4b71Sopenharmony_ci      }
145e41f4b71Sopenharmony_ci    });
146e41f4b71Sopenharmony_ci  } catch (error) {
147e41f4b71Sopenharmony_ci    let code = (error as BusinessError).code;
148e41f4b71Sopenharmony_ci    let message = (error as BusinessError).message;
149e41f4b71Sopenharmony_ci    console.log('error:' + code + ',' + message);
150e41f4b71Sopenharmony_ci  }
151e41f4b71Sopenharmony_ci  ```
152e41f4b71Sopenharmony_ci
153e41f4b71Sopenharmony_ci## getCfgFiles
154e41f4b71Sopenharmony_ci
155e41f4b71Sopenharmony_cigetCfgFiles(relPath: string): Promise&lt;Array&lt;string&gt;&gt;
156e41f4b71Sopenharmony_ci
157e41f4b71Sopenharmony_ciObtains a list of configuration files with the specified name, sorted in ascending order of priority. This API uses a promise to return the result.
158e41f4b71Sopenharmony_ci
159e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
160e41f4b71Sopenharmony_ci
161e41f4b71Sopenharmony_ci**Parameters**
162e41f4b71Sopenharmony_ci
163e41f4b71Sopenharmony_ci| Name | Type  | Mandatory| Description      |
164e41f4b71Sopenharmony_ci| ------- | ------ | ---- | ---------- |
165e41f4b71Sopenharmony_ci| relPath | string | Yes  | Name of the configuration file.|
166e41f4b71Sopenharmony_ci
167e41f4b71Sopenharmony_ci**Error codes**
168e41f4b71Sopenharmony_ci
169e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md).
170e41f4b71Sopenharmony_ci
171e41f4b71Sopenharmony_ci| ID| Error Message                                                                      |
172e41f4b71Sopenharmony_ci| ------- | ---------------------------------------------------------------------------- |
173e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.|
174e41f4b71Sopenharmony_ci
175e41f4b71Sopenharmony_ci**Return value**
176e41f4b71Sopenharmony_ci
177e41f4b71Sopenharmony_ci| Type                              | Description    |
178e41f4b71Sopenharmony_ci| ---------------------------------- | -------- |
179e41f4b71Sopenharmony_ci| Promise&lt;Array&lt;string&gt;&gt; | Promise used to return the file list.|
180e41f4b71Sopenharmony_ci
181e41f4b71Sopenharmony_ci**Example**
182e41f4b71Sopenharmony_ci
183e41f4b71Sopenharmony_ci  ```ts
184e41f4b71Sopenharmony_ci  import { BusinessError } from '@ohos.base';
185e41f4b71Sopenharmony_ci
186e41f4b71Sopenharmony_ci  try {
187e41f4b71Sopenharmony_ci    let relpath: string = 'etc/config.xml';
188e41f4b71Sopenharmony_ci    configPolicy.getCfgFiles(relpath).then((value: Array<string>) => {
189e41f4b71Sopenharmony_ci      console.log('value is ' + value);
190e41f4b71Sopenharmony_ci    }).catch((error: BusinessError) => {
191e41f4b71Sopenharmony_ci      console.log('getCfgFiles promise ' + error);
192e41f4b71Sopenharmony_ci    });
193e41f4b71Sopenharmony_ci  } catch (error) {
194e41f4b71Sopenharmony_ci    let code = (error as BusinessError).code;
195e41f4b71Sopenharmony_ci    let message = (error as BusinessError).message;
196e41f4b71Sopenharmony_ci    console.log('error:' + code + ',' + message);
197e41f4b71Sopenharmony_ci  }
198e41f4b71Sopenharmony_ci  ```
199e41f4b71Sopenharmony_ci
200e41f4b71Sopenharmony_ci## getCfgDirList
201e41f4b71Sopenharmony_ci
202e41f4b71Sopenharmony_cigetCfgDirList(callback: AsyncCallback&lt;Array&lt;string&gt;&gt;)
203e41f4b71Sopenharmony_ci
204e41f4b71Sopenharmony_ciObtains the list of configuration level directories. This API uses an asynchronous callback to return the result.
205e41f4b71Sopenharmony_ci
206e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
207e41f4b71Sopenharmony_ci
208e41f4b71Sopenharmony_ci**Parameters**
209e41f4b71Sopenharmony_ci
210e41f4b71Sopenharmony_ci| Name  | Type                                    | Mandatory| Description                              |
211e41f4b71Sopenharmony_ci| -------- | ---------------------------------------- | ---- | ---------------------------------- |
212e41f4b71Sopenharmony_ci| callback | AsyncCallback&lt;Array&lt;string&gt;&gt; | Yes  | Callback used to return the configuration level directory list.|
213e41f4b71Sopenharmony_ci
214e41f4b71Sopenharmony_ci**Error codes**
215e41f4b71Sopenharmony_ci
216e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md).
217e41f4b71Sopenharmony_ci
218e41f4b71Sopenharmony_ci| ID| Error Message                                                                      |
219e41f4b71Sopenharmony_ci| ------- | ---------------------------------------------------------------------------- |
220e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.|
221e41f4b71Sopenharmony_ci
222e41f4b71Sopenharmony_ci**Example**
223e41f4b71Sopenharmony_ci
224e41f4b71Sopenharmony_ci  ```ts
225e41f4b71Sopenharmony_ci  import { BusinessError } from '@ohos.base';
226e41f4b71Sopenharmony_ci
227e41f4b71Sopenharmony_ci  try {
228e41f4b71Sopenharmony_ci    configPolicy.getCfgDirList((error: BusinessError, value: Array<string>) => {
229e41f4b71Sopenharmony_ci      if (error == null) {
230e41f4b71Sopenharmony_ci        console.log('value is ' + value);
231e41f4b71Sopenharmony_ci      } else {
232e41f4b71Sopenharmony_ci        console.log('error occurs ' + error);
233e41f4b71Sopenharmony_ci      }
234e41f4b71Sopenharmony_ci    });
235e41f4b71Sopenharmony_ci  } catch (error) {
236e41f4b71Sopenharmony_ci    let code = (error as BusinessError).code;
237e41f4b71Sopenharmony_ci    let message = (error as BusinessError).message;
238e41f4b71Sopenharmony_ci    console.log('error:' + code + ',' + message);
239e41f4b71Sopenharmony_ci  }
240e41f4b71Sopenharmony_ci  ```
241e41f4b71Sopenharmony_ci
242e41f4b71Sopenharmony_ci## getCfgDirList
243e41f4b71Sopenharmony_ci
244e41f4b71Sopenharmony_cigetCfgDirList(): Promise&lt;Array&lt;string&gt;&gt;
245e41f4b71Sopenharmony_ci
246e41f4b71Sopenharmony_ciObtains the list of configuration level directories. This API uses a promise to return the result.
247e41f4b71Sopenharmony_ci
248e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
249e41f4b71Sopenharmony_ci
250e41f4b71Sopenharmony_ci**Return value**
251e41f4b71Sopenharmony_ci
252e41f4b71Sopenharmony_ci| Type                              | Description            |
253e41f4b71Sopenharmony_ci| ---------------------------------- | ---------------- |
254e41f4b71Sopenharmony_ci| Promise&lt;Array&lt;string&gt;&gt; | Promise used to return the configuration level directory list.|
255e41f4b71Sopenharmony_ci
256e41f4b71Sopenharmony_ci**Example**
257e41f4b71Sopenharmony_ci
258e41f4b71Sopenharmony_ci  ```ts
259e41f4b71Sopenharmony_ci  import { BusinessError } from '@ohos.base';
260e41f4b71Sopenharmony_ci
261e41f4b71Sopenharmony_ci  try {
262e41f4b71Sopenharmony_ci    configPolicy.getCfgDirList().then((value: Array<string>) => {
263e41f4b71Sopenharmony_ci      console.log('value is ' + value);
264e41f4b71Sopenharmony_ci    }).catch((error: BusinessError) => {
265e41f4b71Sopenharmony_ci      console.log('getCfgDirList promise ' + error);
266e41f4b71Sopenharmony_ci    });
267e41f4b71Sopenharmony_ci  } catch (error) {
268e41f4b71Sopenharmony_ci    let code = (error as BusinessError).code;
269e41f4b71Sopenharmony_ci    let message = (error as BusinessError).message;
270e41f4b71Sopenharmony_ci    console.log('error:' + code + ',' + message);
271e41f4b71Sopenharmony_ci  }
272e41f4b71Sopenharmony_ci  ```
273e41f4b71Sopenharmony_ci
274e41f4b71Sopenharmony_ci## getOneCfgFile<sup>11+</sup>
275e41f4b71Sopenharmony_ci
276e41f4b71Sopenharmony_cigetOneCfgFile(relPath: string, followMode: FollowXMode, callback: AsyncCallback&lt;string&gt;)
277e41f4b71Sopenharmony_ci
278e41f4b71Sopenharmony_ciObtains the path of the configuration file with the highest priority based on the specified file name and follow mode. This API uses an asynchronous callback to return the result.
279e41f4b71Sopenharmony_ciFor example, there are three **config.xml** files (in ascending order of priority): **/system/etc/config.xml**, **/sys_pod/etc/config.xml**, and **/sys_pod/etc/carrier/46060/etc/config.xml**. If the opkey of the default card is **46060** and the follow mode is **SIM_DEFAULT**, **/sys_pod/etc/carrier/46060/etc/config.xml** is returned.
280e41f4b71Sopenharmony_ci
281e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
282e41f4b71Sopenharmony_ci
283e41f4b71Sopenharmony_ci**Parameters**
284e41f4b71Sopenharmony_ci
285e41f4b71Sopenharmony_ci| Name    | Type                         | Mandatory| Description                                      |
286e41f4b71Sopenharmony_ci| ---------- | ----------------------------- | ---- | ------------------------------------------ |
287e41f4b71Sopenharmony_ci| relPath    | string                        | Yes  | Name of the configuration file.                                |
288e41f4b71Sopenharmony_ci| followMode | [FollowXMode](#followxmode11) | Yes  | Follow mode.                                  |
289e41f4b71Sopenharmony_ci| callback   | AsyncCallback&lt;string&gt;   | Yes  | Callback used to return the path of the configuration file.|
290e41f4b71Sopenharmony_ci
291e41f4b71Sopenharmony_ci**Error codes**
292e41f4b71Sopenharmony_ci
293e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md).
294e41f4b71Sopenharmony_ci
295e41f4b71Sopenharmony_ci| ID| Error Message                                                                      |
296e41f4b71Sopenharmony_ci| ------- | ---------------------------------------------------------------------------- |
297e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.|
298e41f4b71Sopenharmony_ci
299e41f4b71Sopenharmony_ci**Example**
300e41f4b71Sopenharmony_ci
301e41f4b71Sopenharmony_ci  ```ts
302e41f4b71Sopenharmony_ci  import { BusinessError } from '@ohos.base';
303e41f4b71Sopenharmony_ci
304e41f4b71Sopenharmony_ci  try {
305e41f4b71Sopenharmony_ci    let relpath: string = 'etc/config.xml';
306e41f4b71Sopenharmony_ci    configPolicy.getOneCfgFile(relpath, configPolicy.FollowXMode.SIM_DEFAULT,
307e41f4b71Sopenharmony_ci      (error: BusinessError, value: string) => {
308e41f4b71Sopenharmony_ci      if (error == null) {
309e41f4b71Sopenharmony_ci        console.log('value is ' + value);
310e41f4b71Sopenharmony_ci      } else {
311e41f4b71Sopenharmony_ci        console.log('error occurs ' + error);
312e41f4b71Sopenharmony_ci      }
313e41f4b71Sopenharmony_ci    });
314e41f4b71Sopenharmony_ci  } catch (error) {
315e41f4b71Sopenharmony_ci    let code = (error as BusinessError).code;
316e41f4b71Sopenharmony_ci    let message = (error as BusinessError).message;
317e41f4b71Sopenharmony_ci    console.log('error:' + code + ',' + message);
318e41f4b71Sopenharmony_ci  }
319e41f4b71Sopenharmony_ci  ```
320e41f4b71Sopenharmony_ci
321e41f4b71Sopenharmony_ci## getOneCfgFile<sup>11+</sup>
322e41f4b71Sopenharmony_ci
323e41f4b71Sopenharmony_cigetOneCfgFile(relPath: string, followMode: FollowXMode, extra: string, callback: AsyncCallback&lt;string&gt;)
324e41f4b71Sopenharmony_ci
325e41f4b71Sopenharmony_ciObtains the path of the configuration file with the highest priority based on the specified file name and custom follow rule. This API uses an asynchronous callback to return the result.
326e41f4b71Sopenharmony_ciFor example, there are three **config.xml** files (in ascending order of priority): **/system/etc/config.xml**, **/sys_pod/etc/config.xml**, and **/sys_pod/etc/carrier/46060/etc/config.xml**. If the opkey of card 1 is **46060**, the follow mode is **USER_DEFINED**, and the custom follow rule is **etc/carrier/${telephony.sim.opkey0}**, **/sys_pod/etc/carrier/46060/etc/config.xml** is returned.
327e41f4b71Sopenharmony_ci
328e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
329e41f4b71Sopenharmony_ci
330e41f4b71Sopenharmony_ci**Parameters**
331e41f4b71Sopenharmony_ci
332e41f4b71Sopenharmony_ci| Name    | Type                         | Mandatory| Description                                                  |
333e41f4b71Sopenharmony_ci| ---------- | ----------------------------- | ---- | ------------------------------------------------------ |
334e41f4b71Sopenharmony_ci| relPath    | string                        | Yes  | Name of the configuration file.                                            |
335e41f4b71Sopenharmony_ci| followMode | [FollowXMode](#followxmode11) | Yes  | Follow mode.                                              |
336e41f4b71Sopenharmony_ci| extra      | string                        | Yes  | Custom follow rule. This parameter is valid only when **followMode** is set to **USER_DEFINED**.|
337e41f4b71Sopenharmony_ci| callback   | AsyncCallback&lt;string&gt;   | Yes  | Callback used to return the path of the configuration file.            |
338e41f4b71Sopenharmony_ci
339e41f4b71Sopenharmony_ci**Error codes**
340e41f4b71Sopenharmony_ci
341e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md).
342e41f4b71Sopenharmony_ci
343e41f4b71Sopenharmony_ci| ID| Error Message                                                                      |
344e41f4b71Sopenharmony_ci| ------- | ---------------------------------------------------------------------------- |
345e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.|
346e41f4b71Sopenharmony_ci
347e41f4b71Sopenharmony_ci**Example**
348e41f4b71Sopenharmony_ci
349e41f4b71Sopenharmony_ci  ```ts
350e41f4b71Sopenharmony_ci  import { BusinessError } from '@ohos.base';
351e41f4b71Sopenharmony_ci
352e41f4b71Sopenharmony_ci  try {
353e41f4b71Sopenharmony_ci    let relpath: string = 'etc/config.xml';
354e41f4b71Sopenharmony_ci    let extra: string = 'etc/carrier/${telephony.sim.opkey0}';
355e41f4b71Sopenharmony_ci    configPolicy.getOneCfgFile(relpath, configPolicy.FollowXMode.USER_DEFINED, extra,
356e41f4b71Sopenharmony_ci      (error: BusinessError, value: string) => {
357e41f4b71Sopenharmony_ci      if (error == null) {
358e41f4b71Sopenharmony_ci        console.log('value is ' + value);
359e41f4b71Sopenharmony_ci      } else {
360e41f4b71Sopenharmony_ci        console.log('error occurs ' + error);
361e41f4b71Sopenharmony_ci      }
362e41f4b71Sopenharmony_ci    });
363e41f4b71Sopenharmony_ci  } catch (error) {
364e41f4b71Sopenharmony_ci    let code = (error as BusinessError).code;
365e41f4b71Sopenharmony_ci    let message = (error as BusinessError).message;
366e41f4b71Sopenharmony_ci    console.log('error:' + code + ',' + message);
367e41f4b71Sopenharmony_ci  }
368e41f4b71Sopenharmony_ci  ```
369e41f4b71Sopenharmony_ci
370e41f4b71Sopenharmony_ci## getOneCfgFile<sup>11+</sup>
371e41f4b71Sopenharmony_ci
372e41f4b71Sopenharmony_cigetOneCfgFile(relPath: string, followMode: FollowXMode, extra?: string): Promise&lt;string&gt;
373e41f4b71Sopenharmony_ci
374e41f4b71Sopenharmony_ciObtains the path of the configuration file with the highest priority based on the specified file name and follow mode. This API uses a promise to return the result.
375e41f4b71Sopenharmony_ci
376e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
377e41f4b71Sopenharmony_ci
378e41f4b71Sopenharmony_ci**Parameters**
379e41f4b71Sopenharmony_ci
380e41f4b71Sopenharmony_ci| Name    | Type                         | Mandatory| Description                                                  |
381e41f4b71Sopenharmony_ci| ---------- | ----------------------------- | ---- | ------------------------------------------------------ |
382e41f4b71Sopenharmony_ci| relPath    | string                        | Yes  | Name of the configuration file.                                            |
383e41f4b71Sopenharmony_ci| followMode | [FollowXMode](#followxmode11) | Yes  | Follow mode.                                              |
384e41f4b71Sopenharmony_ci| extra      | string                        | No  | Custom follow rule. This parameter is valid only when **followMode** is set to **USER_DEFINED**.|
385e41f4b71Sopenharmony_ci
386e41f4b71Sopenharmony_ci**Error codes**
387e41f4b71Sopenharmony_ci
388e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md).
389e41f4b71Sopenharmony_ci
390e41f4b71Sopenharmony_ci| ID| Error Message                                                                      |
391e41f4b71Sopenharmony_ci| ------- | ---------------------------------------------------------------------------- |
392e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3.Parameter verification failed.|
393e41f4b71Sopenharmony_ci
394e41f4b71Sopenharmony_ci**Return value**
395e41f4b71Sopenharmony_ci
396e41f4b71Sopenharmony_ci| Type                  | Description                    |
397e41f4b71Sopenharmony_ci| ---------------------- | ------------------------ |
398e41f4b71Sopenharmony_ci| Promise&lt;string&gt;  | Promise used to return the path of the configuration file.|
399e41f4b71Sopenharmony_ci
400e41f4b71Sopenharmony_ci**Example**
401e41f4b71Sopenharmony_ci
402e41f4b71Sopenharmony_ci  ```ts
403e41f4b71Sopenharmony_ci  import { BusinessError } from '@ohos.base';
404e41f4b71Sopenharmony_ci
405e41f4b71Sopenharmony_ci  try {
406e41f4b71Sopenharmony_ci    let relpath: string = 'etc/config.xml';
407e41f4b71Sopenharmony_ci    let extra: string = 'etc/carrier/${telephony.sim.opkey0}';
408e41f4b71Sopenharmony_ci    configPolicy.getOneCfgFile(relpath, configPolicy.FollowXMode.SIM_DEFAULT, extra).then((value: string) => {
409e41f4b71Sopenharmony_ci      console.log('value is ' + value);
410e41f4b71Sopenharmony_ci    }).catch((error: BusinessError) => {
411e41f4b71Sopenharmony_ci      console.log('getOneCfgFile promise ' + error);
412e41f4b71Sopenharmony_ci    });
413e41f4b71Sopenharmony_ci  } catch (error) {
414e41f4b71Sopenharmony_ci    let code = (error as BusinessError).code;
415e41f4b71Sopenharmony_ci    let message = (error as BusinessError).message;
416e41f4b71Sopenharmony_ci    console.log('error:' + code + ',' + message);
417e41f4b71Sopenharmony_ci  }
418e41f4b71Sopenharmony_ci  ```
419e41f4b71Sopenharmony_ci
420e41f4b71Sopenharmony_ci## getOneCfgFileSync<sup>11+</sup>
421e41f4b71Sopenharmony_ci
422e41f4b71Sopenharmony_cigetOneCfgFileSync(relPath: string, followMode?: FollowXMode, extra?: string): string
423e41f4b71Sopenharmony_ci
424e41f4b71Sopenharmony_ciObtains the path of the configuration file with the highest priority based on the specified file name and follow mode. This API returns the result synchronously.
425e41f4b71Sopenharmony_ci
426e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
427e41f4b71Sopenharmony_ci
428e41f4b71Sopenharmony_ci**Parameters**
429e41f4b71Sopenharmony_ci
430e41f4b71Sopenharmony_ci| Name    | Type                         | Mandatory| Description                                                |
431e41f4b71Sopenharmony_ci| ---------- | ----------------------------- | ---- | ----------------------------------------------------|
432e41f4b71Sopenharmony_ci| relPath    | string                        | Yes  | Name of the configuration file.                                          |
433e41f4b71Sopenharmony_ci| followMode | [FollowXMode](#followxmode11) | No  | Follow mode. The default value is **DEFAULT**.                   |
434e41f4b71Sopenharmony_ci| extra      | string                        | No  | Custom follow rule. This parameter is valid only when **followMode** is set to **USER_DEFINED**.|
435e41f4b71Sopenharmony_ci
436e41f4b71Sopenharmony_ci**Error codes**
437e41f4b71Sopenharmony_ci
438e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md).
439e41f4b71Sopenharmony_ci
440e41f4b71Sopenharmony_ci| ID| Error Message                                                                      |
441e41f4b71Sopenharmony_ci| ------- | ---------------------------------------------------------------------------- |
442e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3.Parameter verification failed.|
443e41f4b71Sopenharmony_ci
444e41f4b71Sopenharmony_ci**Return value**
445e41f4b71Sopenharmony_ci
446e41f4b71Sopenharmony_ci| Type  | Description                    |
447e41f4b71Sopenharmony_ci| ------ | ------------------------ |
448e41f4b71Sopenharmony_ci| string | Promise used to return the path of the configuration file.|
449e41f4b71Sopenharmony_ci
450e41f4b71Sopenharmony_ci
451e41f4b71Sopenharmony_ci**Example**
452e41f4b71Sopenharmony_ci
453e41f4b71Sopenharmony_ci  ```ts
454e41f4b71Sopenharmony_ci  import { BusinessError } from '@ohos.base';
455e41f4b71Sopenharmony_ci
456e41f4b71Sopenharmony_ci  try {
457e41f4b71Sopenharmony_ci    let relpath: string = 'etc/config.xml';
458e41f4b71Sopenharmony_ci    let extra: string = 'etc/carrier/${telephony.sim.opkey0}';
459e41f4b71Sopenharmony_ci    let result: string = configPolicy.getOneCfgFileSync(relpath, configPolicy.FollowXMode.USER_DEFINED, extra);
460e41f4b71Sopenharmony_ci    console.log('result is ' + result);
461e41f4b71Sopenharmony_ci  } catch (error) {
462e41f4b71Sopenharmony_ci    let code = (error as BusinessError).code;
463e41f4b71Sopenharmony_ci    let message = (error as BusinessError).message;
464e41f4b71Sopenharmony_ci    console.log('error:' + code + ',' + message);
465e41f4b71Sopenharmony_ci  }
466e41f4b71Sopenharmony_ci  ```
467e41f4b71Sopenharmony_ci
468e41f4b71Sopenharmony_ci## getCfgFiles<sup>11+</sup>
469e41f4b71Sopenharmony_ci
470e41f4b71Sopenharmony_cigetCfgFiles(relPath: string, followMode: FollowXMode, callback: AsyncCallback&lt;Array&lt;string&gt;&gt;)
471e41f4b71Sopenharmony_ci
472e41f4b71Sopenharmony_ciObtains a list of configuration files based on the specified file name and follow mode, sorted in ascending order of priority. This API uses an asynchronous callback to return the result.
473e41f4b71Sopenharmony_ciFor example, there are three **config.xml** files (in ascending order of priority): **/system/etc/config.xml**, **/sys_pod/etc/config.xml**, and **/sys_pod/etc/carrier/46060/etc/config.xml**. If the opkey of the default card is **46060** and the follow mode is **SIM_DEFAULT**, **/system/etc/config.xml, /sys_pod/etc/config.xml, /sys_pod/etc/carrier/46060/etc/config.xml** is returned.
474e41f4b71Sopenharmony_ci
475e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
476e41f4b71Sopenharmony_ci
477e41f4b71Sopenharmony_ci**Parameters**
478e41f4b71Sopenharmony_ci
479e41f4b71Sopenharmony_ci| Name    | Type                                    | Mandatory| Description                      |
480e41f4b71Sopenharmony_ci| ---------- | ---------------------------------------- | ---- | -------------------------- |
481e41f4b71Sopenharmony_ci| relPath    | string                                   | Yes  | Name of the configuration file.                |
482e41f4b71Sopenharmony_ci| followMode | [FollowXMode](#followxmode11)            | Yes  | Follow mode.                  |
483e41f4b71Sopenharmony_ci| callback   | AsyncCallback&lt;Array&lt;string&gt;&gt; | Yes  | Callback used to return the file list.|
484e41f4b71Sopenharmony_ci
485e41f4b71Sopenharmony_ci**Error codes**
486e41f4b71Sopenharmony_ci
487e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md).
488e41f4b71Sopenharmony_ci
489e41f4b71Sopenharmony_ci| ID| Error Message                                                                      |
490e41f4b71Sopenharmony_ci| ------- | ---------------------------------------------------------------------------- |
491e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.|
492e41f4b71Sopenharmony_ci
493e41f4b71Sopenharmony_ci**Example**
494e41f4b71Sopenharmony_ci
495e41f4b71Sopenharmony_ci  ```ts
496e41f4b71Sopenharmony_ci  import { BusinessError } from '@ohos.base';
497e41f4b71Sopenharmony_ci
498e41f4b71Sopenharmony_ci  try {
499e41f4b71Sopenharmony_ci    let relpath: string = 'etc/config.xml';
500e41f4b71Sopenharmony_ci    configPolicy.getCfgFiles(relpath, configPolicy.FollowXMode.SIM_DEFAULT,
501e41f4b71Sopenharmony_ci      (error: BusinessError, value: Array<string>) => {
502e41f4b71Sopenharmony_ci      if (error == null) {
503e41f4b71Sopenharmony_ci        console.log('value is ' + value);
504e41f4b71Sopenharmony_ci      } else {
505e41f4b71Sopenharmony_ci        console.log('error occurs ' + error);
506e41f4b71Sopenharmony_ci      }
507e41f4b71Sopenharmony_ci    });
508e41f4b71Sopenharmony_ci  } catch (error) {
509e41f4b71Sopenharmony_ci    let code = (error as BusinessError).code;
510e41f4b71Sopenharmony_ci    let message = (error as BusinessError).message;
511e41f4b71Sopenharmony_ci    console.log('error:' + code + ',' + message);
512e41f4b71Sopenharmony_ci  }
513e41f4b71Sopenharmony_ci  ```
514e41f4b71Sopenharmony_ci
515e41f4b71Sopenharmony_ci## getCfgFiles<sup>11+</sup>
516e41f4b71Sopenharmony_ci
517e41f4b71Sopenharmony_cigetCfgFiles(relPath: string, followMode: FollowXMode, extra: string, callback: AsyncCallback&lt;Array&lt;string&gt;&gt;)
518e41f4b71Sopenharmony_ci
519e41f4b71Sopenharmony_ciObtains a list of configuration files based on the specified file name and custom follow rule, sorted in ascending order of priority. This API uses an asynchronous callback to return the result.
520e41f4b71Sopenharmony_ciFor example, there are three **config.xml** files (in ascending order of priority): **/system/etc/config.xml**, **/sys_pod/etc/config.xml**, and **/sys_pod/etc/carrier/46060/etc/config.xml**. If the opkey of card 1 is **46060**, the follow mode is **USER_DEFINED**, and the custom follow rule is **etc/carrier/${telephony.sim.opkey0}**, **/system/etc/config.xml, /sys_pod/etc/config.xml, /sys_pod/etc/carrier/46060/etc/config.xml** is returned.
521e41f4b71Sopenharmony_ci
522e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
523e41f4b71Sopenharmony_ci
524e41f4b71Sopenharmony_ci**Parameters**
525e41f4b71Sopenharmony_ci
526e41f4b71Sopenharmony_ci| Name    | Type                                    | Mandatory| Description                                                  |
527e41f4b71Sopenharmony_ci| ---------- | ---------------------------------------- | ---- | ------------------------------------------------------ |
528e41f4b71Sopenharmony_ci| relPath    | string                                   | Yes  | Name of the configuration file.                                            |
529e41f4b71Sopenharmony_ci| followMode | [FollowXMode](#followxmode11)            | Yes  | Follow mode.                                              |
530e41f4b71Sopenharmony_ci| extra      | string                                   | Yes  | Custom follow rule. This parameter is valid only when **followMode** is set to **USER_DEFINED**.|
531e41f4b71Sopenharmony_ci| callback   | AsyncCallback&lt;Array&lt;string&gt;&gt; | Yes  | Callback used to return the file list.                            |
532e41f4b71Sopenharmony_ci
533e41f4b71Sopenharmony_ci**Error codes**
534e41f4b71Sopenharmony_ci
535e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md).
536e41f4b71Sopenharmony_ci
537e41f4b71Sopenharmony_ci| ID| Error Message                                                                      |
538e41f4b71Sopenharmony_ci| ------- | ---------------------------------------------------------------------------- |
539e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.|
540e41f4b71Sopenharmony_ci
541e41f4b71Sopenharmony_ci**Example**
542e41f4b71Sopenharmony_ci
543e41f4b71Sopenharmony_ci  ```ts
544e41f4b71Sopenharmony_ci  import { BusinessError } from '@ohos.base';
545e41f4b71Sopenharmony_ci
546e41f4b71Sopenharmony_ci  try {
547e41f4b71Sopenharmony_ci    let relpath: string = 'etc/config.xml';
548e41f4b71Sopenharmony_ci    let extra: string = 'etc/carrier/${telephony.sim.opkey0}';
549e41f4b71Sopenharmony_ci    configPolicy.getCfgFiles(relpath, configPolicy.FollowXMode.SIM_DEFAULT, extra,
550e41f4b71Sopenharmony_ci      (error: BusinessError, value: Array<string>) => {
551e41f4b71Sopenharmony_ci      if (error == null) {
552e41f4b71Sopenharmony_ci        console.log('value is ' + value);
553e41f4b71Sopenharmony_ci      } else {
554e41f4b71Sopenharmony_ci        console.log('error occurs ' + error);
555e41f4b71Sopenharmony_ci      }
556e41f4b71Sopenharmony_ci    });
557e41f4b71Sopenharmony_ci  } catch (error) {
558e41f4b71Sopenharmony_ci    let code = (error as BusinessError).code;
559e41f4b71Sopenharmony_ci    let message = (error as BusinessError).message;
560e41f4b71Sopenharmony_ci    console.log('error:' + code + ',' + message);
561e41f4b71Sopenharmony_ci  }
562e41f4b71Sopenharmony_ci  ```
563e41f4b71Sopenharmony_ci
564e41f4b71Sopenharmony_ci## getCfgFiles<sup>11+</sup>
565e41f4b71Sopenharmony_ci
566e41f4b71Sopenharmony_cigetCfgFiles(relPath: string, followMode: FollowXMode, extra?: string): Promise&lt;Array&lt;string&gt;&gt;
567e41f4b71Sopenharmony_ci
568e41f4b71Sopenharmony_ciObtains a list of configuration files based on the specified file name and follow mode, sorted in ascending order of priority. This API uses a promise to return the result.
569e41f4b71Sopenharmony_ci
570e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
571e41f4b71Sopenharmony_ci
572e41f4b71Sopenharmony_ci**Parameters**
573e41f4b71Sopenharmony_ci
574e41f4b71Sopenharmony_ci| Name    | Type                         | Mandatory| Description                                                  |
575e41f4b71Sopenharmony_ci| ---------- | ----------------------------- | ---- | ------------------------------------------------------ |
576e41f4b71Sopenharmony_ci| relPath    | string                        | Yes  | Name of the configuration file.                                            |
577e41f4b71Sopenharmony_ci| followMode | [FollowXMode](#followxmode11) | Yes  | Follow mode.                                              |
578e41f4b71Sopenharmony_ci| extra      | string                        | No  | Custom follow rule. This parameter is valid only when **followMode** is set to **USER_DEFINED**.|
579e41f4b71Sopenharmony_ci
580e41f4b71Sopenharmony_ci**Error codes**
581e41f4b71Sopenharmony_ci
582e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md).
583e41f4b71Sopenharmony_ci
584e41f4b71Sopenharmony_ci| ID| Error Message                                                                      |
585e41f4b71Sopenharmony_ci| ------- | ---------------------------------------------------------------------------- |
586e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3.Parameter verification failed.|
587e41f4b71Sopenharmony_ci
588e41f4b71Sopenharmony_ci**Return value**
589e41f4b71Sopenharmony_ci
590e41f4b71Sopenharmony_ci| Type                              | Description    |
591e41f4b71Sopenharmony_ci| ---------------------------------- | -------- |
592e41f4b71Sopenharmony_ci| Promise&lt;Array&lt;string&gt;&gt; | Promise used to return the file list.|
593e41f4b71Sopenharmony_ci
594e41f4b71Sopenharmony_ci**Example**
595e41f4b71Sopenharmony_ci
596e41f4b71Sopenharmony_ci  ```ts
597e41f4b71Sopenharmony_ci  import { BusinessError } from '@ohos.base';
598e41f4b71Sopenharmony_ci
599e41f4b71Sopenharmony_ci  try {
600e41f4b71Sopenharmony_ci    let relpath: string = 'etc/config.xml';
601e41f4b71Sopenharmony_ci    let extra: string = 'etc/carrier/${telephony.sim.opkey0}';
602e41f4b71Sopenharmony_ci    configPolicy.getCfgFiles(relpath, configPolicy.FollowXMode.SIM_DEFAULT, extra).then((value: Array<string>) => {
603e41f4b71Sopenharmony_ci      console.log('value is ' + value);
604e41f4b71Sopenharmony_ci    }).catch((error: BusinessError) => {
605e41f4b71Sopenharmony_ci      console.log('getCfgFiles promise ' + error);
606e41f4b71Sopenharmony_ci    });
607e41f4b71Sopenharmony_ci  } catch (error) {
608e41f4b71Sopenharmony_ci    let code = (error as BusinessError).code;
609e41f4b71Sopenharmony_ci    let message = (error as BusinessError).message;
610e41f4b71Sopenharmony_ci    console.log('error:' + code + ',' + message);
611e41f4b71Sopenharmony_ci  }
612e41f4b71Sopenharmony_ci  ```
613e41f4b71Sopenharmony_ci
614e41f4b71Sopenharmony_ci## getCfgFilesSync<sup>11+</sup>
615e41f4b71Sopenharmony_ci
616e41f4b71Sopenharmony_cigetCfgFilesSync(relPath: string, followMode?: FollowXMode, extra?: string): Array&lt;string&gt;
617e41f4b71Sopenharmony_ci
618e41f4b71Sopenharmony_ciObtains a list of configuration files based on the specified file name and follow mode, sorted in ascending order of priority. This API returns the result synchronously.
619e41f4b71Sopenharmony_ci
620e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
621e41f4b71Sopenharmony_ci
622e41f4b71Sopenharmony_ci**Parameters**
623e41f4b71Sopenharmony_ci
624e41f4b71Sopenharmony_ci| Name    | Type                         | Mandatory| Description                                                  |
625e41f4b71Sopenharmony_ci| ---------- | ----------------------------- | ---- | ------------------------------------------------------ |
626e41f4b71Sopenharmony_ci| relPath    | string                        | Yes  | Name of the configuration file.                                            |
627e41f4b71Sopenharmony_ci| followMode | [FollowXMode](#followxmode11) | No  | Follow mode. The default value is **DEFAULT**.                   |
628e41f4b71Sopenharmony_ci| extra      | string                        | No  | Custom follow rule. This parameter is valid only when **followMode** is set to **USER_DEFINED**.|
629e41f4b71Sopenharmony_ci
630e41f4b71Sopenharmony_ci**Error codes**
631e41f4b71Sopenharmony_ci
632e41f4b71Sopenharmony_ciFor details about the error codes, see [Universal Error Codes](../errorcode-universal.md).
633e41f4b71Sopenharmony_ci
634e41f4b71Sopenharmony_ci| ID| Error Message                                                                      |
635e41f4b71Sopenharmony_ci| ------- | ---------------------------------------------------------------------------- |
636e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3.Parameter verification failed.|
637e41f4b71Sopenharmony_ci
638e41f4b71Sopenharmony_ci**Return value**
639e41f4b71Sopenharmony_ci
640e41f4b71Sopenharmony_ci| Type               | Description    |
641e41f4b71Sopenharmony_ci| ------------------- | -------- |
642e41f4b71Sopenharmony_ci| Array&lt;string&gt; | Promise used to return the file list.|
643e41f4b71Sopenharmony_ci
644e41f4b71Sopenharmony_ci
645e41f4b71Sopenharmony_ci**Example**
646e41f4b71Sopenharmony_ci
647e41f4b71Sopenharmony_ci  ```ts
648e41f4b71Sopenharmony_ci  import { BusinessError } from '@ohos.base';
649e41f4b71Sopenharmony_ci
650e41f4b71Sopenharmony_ci  try {
651e41f4b71Sopenharmony_ci    let relpath: string = 'etc/config.xml';
652e41f4b71Sopenharmony_ci    let extra: string = 'etc/carrier/${telephony.sim.opkey0}';
653e41f4b71Sopenharmony_ci    let result: Array<string> = configPolicy.getCfgFilesSync(relpath, configPolicy.FollowXMode.USER_DEFINED, extra);
654e41f4b71Sopenharmony_ci    console.log('result is ' + result);
655e41f4b71Sopenharmony_ci  } catch (error) {
656e41f4b71Sopenharmony_ci    let code = (error as BusinessError).code;
657e41f4b71Sopenharmony_ci    let message = (error as BusinessError).message;
658e41f4b71Sopenharmony_ci    console.log('error:' + code + ',' + message);
659e41f4b71Sopenharmony_ci  }
660e41f4b71Sopenharmony_ci  ```
661e41f4b71Sopenharmony_ci
662e41f4b71Sopenharmony_ci## getCfgDirListSync<sup>11+</sup>
663e41f4b71Sopenharmony_ci
664e41f4b71Sopenharmony_cigetCfgDirListSync(): Array&lt;string&gt;
665e41f4b71Sopenharmony_ci
666e41f4b71Sopenharmony_ciObtains the list of configuration level directories. This API returns the result synchronously.
667e41f4b71Sopenharmony_ci
668e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
669e41f4b71Sopenharmony_ci
670e41f4b71Sopenharmony_ci**Return value**
671e41f4b71Sopenharmony_ci
672e41f4b71Sopenharmony_ci| Type               | Description            |
673e41f4b71Sopenharmony_ci| ------------------- | ---------------- |
674e41f4b71Sopenharmony_ci| Array&lt;string&gt; | Promise used to return the configuration level directory list.|
675e41f4b71Sopenharmony_ci
676e41f4b71Sopenharmony_ci
677e41f4b71Sopenharmony_ci**Example**
678e41f4b71Sopenharmony_ci
679e41f4b71Sopenharmony_ci  ```ts
680e41f4b71Sopenharmony_ci  import { BusinessError } from '@ohos.base';
681e41f4b71Sopenharmony_ci
682e41f4b71Sopenharmony_ci  try {
683e41f4b71Sopenharmony_ci    let result: Array<string> = configPolicy.getCfgDirListSync();
684e41f4b71Sopenharmony_ci    console.log('result is ' + result);
685e41f4b71Sopenharmony_ci  } catch (error) {
686e41f4b71Sopenharmony_ci    let code = (error as BusinessError).code;
687e41f4b71Sopenharmony_ci    let message = (error as BusinessError).message;
688e41f4b71Sopenharmony_ci    console.log('error:' + code + ',' + message);
689e41f4b71Sopenharmony_ci  }
690e41f4b71Sopenharmony_ci  ```
691e41f4b71Sopenharmony_ci
692e41f4b71Sopenharmony_ci## FollowXMode<sup>11+</sup>
693e41f4b71Sopenharmony_ci
694e41f4b71Sopenharmony_ci**System capability**: SystemCapability.Customization.ConfigPolicy
695e41f4b71Sopenharmony_ci
696e41f4b71Sopenharmony_ci| Name            | Value | Description                                                                                                                      |
697e41f4b71Sopenharmony_ci| ---------------- | --- | -------------------------------------------------------------------------------------------------------------------------- |
698e41f4b71Sopenharmony_ci| DEFAULT          | 0   | Files are searched based on the follow rules configured in the **followx_file_list.cfg** file at each configuration level.                               |
699e41f4b71Sopenharmony_ci| NO_RULE_FOLLOWED | 1   | No follow rule is used, even if the **followx_file_list.cfg** file exists.                                             |
700e41f4b71Sopenharmony_ci| SIM_DEFAULT      | 10  | Files are searched in **etc/carrier/${opkey}** file at each configuration level based on the opkey of the default card.                               |
701e41f4b71Sopenharmony_ci| SIM_1            | 11  | Files are searched in **etc/carrier/${opkey}** at each configuration level based on the opkey of card 1.                                     |
702e41f4b71Sopenharmony_ci| SIM_2            | 12  | Files are searched in **etc/carrier/${opkey}** at each configuration level based on the opkey of card 2.                                     |
703e41f4b71Sopenharmony_ci| USER_DEFINED     | 100 | Files are searched based on the follow rule passed in **extra**, rather than the **followx_file_list.cfg** file at each configuration level.|
704